Java 我不知道;。t在PocketTester中无法获得正确的输出
所以我开始的这个项目有三个类,每个类做一件特定的事情。可以使用所选(字符串)、美元、四分之一、镍币、一角硬币和便士实例化的硬币类。很明显,每枚硬币都有不同的分值,并且会将值返回给调用者。我的Pocket类实例化了几个硬币对象,并将其用作自定义对象/类型作为实例字段。然后,我的上一个名为PocketTester的类创建了一个名为myPocket的对象,该对象将有5个25美分、3个10美分、2个5美分和7美分的输入,并打印出总值 产量:172美分 这是我的类,但出于某种原因,当我运行main()时,它会给我132美分而不是172美分,我不知道为什么。我很确定我正确地调用了变量。有人能帮我修一下吗 顺便说一句,你们可能会问我,为什么我没有在一个类中这样做,并导入了Scanner并使用它,我只是想这样做 当我第一次发布这篇文章时,有人决定把它标记为重复或转载,而这从来都不是重复或报告,所以不要Java 我不知道;。t在PocketTester中无法获得正确的输出,java,object,if-statement,instantiation,custom-object,Java,Object,If Statement,Instantiation,Custom Object,所以我开始的这个项目有三个类,每个类做一件特定的事情。可以使用所选(字符串)、美元、四分之一、镍币、一角硬币和便士实例化的硬币类。很明显,每枚硬币都有不同的分值,并且会将值返回给调用者。我的Pocket类实例化了几个硬币对象,并将其用作自定义对象/类型作为实例字段。然后,我的上一个名为PocketTester的类创建了一个名为myPocket的对象,该对象将有5个25美分、3个10美分、2个5美分和7美分的输入,并打印出总值 产量:172美分 这是我的类,但出于某种原因,当我运行main()时,
public class Coin
{
private int value;
public int dollar;
public int quarter;
public int dime;
public int nickel;
public int penny;
public Coin(String s){
//Use if statement to identify incoming string and provide value in cents
if(s.equals("Dollar")){
dollar = 1;
}
else if (s.equals("Quarter")){
quarter = 25;
}
else if (s.equals("Dime")){
dime = 10;
}
else if (s.equals("Nickel")){
nickel = 5;
}
else if(s.equals("Penny")){
penny = 1;
}
else{
System.out.println("Give me an actual coin");
}
}
public int getValue()
{
return value;
}
}
如果您的目标是编写只在您使用的确切、特定的测试用例中正常工作的代码,那么您所拥有的应该可以正常工作 你得到的是132而不是172是因为你只计算了5个25美分(125)和7个便士(7)。125+7=132 为什么??因为在
addCoin()
方法中,您正在检查字符串匹配。如果字符串与“nickels”匹配,则添加nickels,但是您的测试代码传递的是“Nickel”,没有s,因此不会添加。硬币也是一样
尽管如此,我还是强烈建议您进一步研究如何使用变量,因为您正在使用几个完全不必要的变量。通过检查传递给addCoin()
的整数是否与预设值匹配,您还将代码限制为仅使用的确切测试用例;如果您只需使用i
并乘以所添加硬币的价值(25表示四分之一,等等),则无论您添加多少硬币,都可以使用此代码
我还建议在检查字符串匹配时使用
equals()
而不是=
,这是在Coin类中执行的操作,而不是在Pocket类中执行的操作;您只能在这里看到任何成功,因为您的所有字符串都是文本。不要进行字符串比较,以与=
运算符(s==“Dollar”
)相等。这是错误的。改用String#equals()方法或String#equalsIgnoreCase()方法(在本例中,后者更好)s.equalsIgnoreCase(“美元”)
由于您使用的是美分
美元应等于100(而不是1)。addCoin()
方法应该像这样计算每种货币面额:if(s.equalsIgnoreCase(“quarter”){quarter=25*i;}
。最好使用一个switch/case
,而不是一堆if/else if
语句。对于这个:if(s==“Dollar”| s==“Quarter”| s==“Dime”| s==“Nickel”| s==“Penny”&i==0){System.out.println(“输入实际硬币”)}
要真正有效,应该是这样的:if((s.equalsIgnoreCase(“美元”)| s.equalsIgnoreCase(“四分之一”)| s.equalsIgnoreCase(“一角”)| s.equalsIgnoreCase(“镍币”)| s.equalsIgnoreCase(“便士”)和&i==0){System.out.println(“输入“+s”的实际硬币数);return;}
。注意所有的|
条件是如何用一组括号括起来的?谢谢你的回答我刚刚修复了我的代码,它可以工作,但是我怎么做呢?它可以与任何测试用例一起工作,这样我就不必手动编写5个25美分、3个10美分、2个5美分和7美分的代码了pennys@hobmnum而不是使用单独的变量对于quarter、dime等,您可以删除if
语句中的所有和&i==?
条件。然后,不要设置quarter=?
,例如,只需说currentValue+=i*25
,这会将25个四分之一的数量添加到当前值中。然后您还可以删除加法语句最后。
public class Pocket
{
private int currentValue;
private int totalValue;
public int dollar;
public int quarter;
public int dime;
public int nickel;
public int penny;
//You need to add more custom type instance variables here
public Pocket(){ //Set initial value to zero
totalValue = 0;
currentValue = 0;
}
public void addCoin(String s, int i){
// s is type of coin, you are using s to instantiate a Coin and get value
// i is number of coins, you are using i to keep adding value to the totalValue
if(s == "Dollar" || s == "Quarter" || s == "Dime" || s == "Nickel" || s == "Penny" && i == 0){
System.out.println(" Input an actual Coin ");
}
if(s == "Quarter" && i == 5){
quarter = 125;
}
if(s == "Dimes" && i == 3){
dime = 30;
}
if(s == "Nickels" && i == 2){
nickel = 10;
}
if(s == "Penny" && i == 7){
penny = 7;
}
currentValue = quarter + dime + nickel + penny;
}
public int getValue(){
return totalValue;
}
public void printTotal(){
System.out.println(currentValue+ " cents");
System.out.println();
}
}
public class PocketTester
{
public static void main(String args[])
{
Pocket myPocket = new Pocket();
myPocket.addCoin("Quarter", 5);
myPocket.addCoin("Dime", 3);
myPocket.addCoin("Nickel", 2);
myPocket.addCoin("Penny", 7);
myPocket.printTotal();
}
}