Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我不知道;。t在PocketTester中无法获得正确的输出_Java_Object_If Statement_Instantiation_Custom Object - Fatal编程技术网

Java 我不知道;。t在PocketTester中无法获得正确的输出

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()时,

所以我开始的这个项目有三个类,每个类做一件特定的事情。可以使用所选(字符串)、美元、四分之一、镍币、一角硬币和便士实例化的硬币类。很明显,每枚硬币都有不同的分值,并且会将值返回给调用者。我的Pocket类实例化了几个硬币对象,并将其用作自定义对象/类型作为实例字段。然后,我的上一个名为PocketTester的类创建了一个名为myPocket的对象,该对象将有5个25美分、3个10美分、2个5美分和7美分的输入,并打印出总值

产量:172美分

这是我的类,但出于某种原因,当我运行main()时,它会给我132美分而不是172美分,我不知道为什么。我很确定我正确地调用了变量。有人能帮我修一下吗

顺便说一句,你们可能会问我,为什么我没有在一个类中这样做,并导入了Scanner并使用它,我只是想这样做

当我第一次发布这篇文章时,有人决定把它标记为重复或转载,而这从来都不是重复或报告,所以不要

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();
    }
}