-2

我有一个名为 Food 的抽象类,在其中我将 double currentCash 初始化为 59。我有 Food 的 2 个子类;水果和肉类,我从我的现金储备 59 中减去用户输入的价格。在用户输入价格后,继续处理下一个 Food 对象,无论是水果还是肉类类型,现金储备再次返回到 59 .

 abstract public class Food implements Interface {//abstract class. 

 static public double currentCash=59;
 double newCash=0; 
 }



public class Fruit extends Food implements Interface {



public  String name;
public  double price;
public  String setName;
public  int priority;



public Fruit() {

    name="no name yet.";
    price=0;
    priority=0;
    realPrice=0;
}

public Fruit(String initialName, int initialPriority, double initalPrice, double initalrealPrice){
    name=initialName;
    priority=initialPriority;
    price=initalPrice;
    realPrice=initalrealPrice;
}

public int getPriority() {
    return priority;
}


public void setPriority(int priority) {
    if (priority > 0 && priority <= 7) {

        this.priority = priority;
    } else {

        System.err.println("Error, enter 1 through 7"); 

    }
}


public String getName() {
    return name;
}


public void setName(String name) {
    this.name = name;
}

public void setrealPrice(double realPrice){
    this.realPrice=realPrice;
}

@Override
public void writeOutput(){

    System.out.println ("Name: "+getName()+" Priority: "+priority +" Price: "+price );



}
public boolean hasSameName (Fruit otherFruit){
    return this.name.equalsIgnoreCase(otherFruit.name);
}

public void setPrice(double price) {
    this.price=price;

}

public double getPrice(){
return price;

}

public double realPrice(){
    return realPrice;
}
@Override
public String eatable() {
    String eatablePrint= "Interface eatable";
    return eatablePrint;
}



@Override
public void cashReserves() {



    newCash= currentCash-price;

    if (newCash>0){
        System.out.println("You have "+newCash+" dollars left for your list.\n");
    }
    else 
    {
    String k = "out of cash";
        System.out.println(k);


    }

    currentCash=newCash;

    }

@Override
public void realPrices() {

    double realCash;
    realCash=currentCash-realPrice;// the price you want to pay is what you type in, but the actual price is here. 
    System.out.println("The grocery store price is " +realPrice+" dollars, and you have "+ realCash+" dollars left.\n");
    if (realCash<10){
    System.out.println("You're running out of real cash");
    }

    if (realCash<=0){
        System.out.println("You're out of real cash");
    }

}

}

在每个 cashReserves 方法之后,currentCash 再次返回 59,而不是用户输入价格后的新值。

你输入的是

什么样的苹果

苹果电脑

输入优先级

1

输入您要支付的价格

1

苹果类型:mac

您要支付的苹果价格:1.0 美元。

您的清单还剩 58.0 美元。

4

2 回答 2

2

您的方法cashReserves()永远不会修改currentCash.

你有一个注释掉的行,//currentCash=newCash;它会修改 的值currentCash,但是......它被注释掉了。


编辑:鉴于对原始问题的当前编辑,其中您已取消注释有问题的行并将其移出else块,我只能猜测您的price变量的值未正确设置。设置什么并不重要newCash。如果price0,则该行:

newCash = currentCash - price;

是相同的

newCash = currentCash - 0;

要不就

newCash = currentCash;

因此,稍后在您的方法中执行以下操作:

currentCash = newCash;

并且期望currentCash已经改变(并声称它正在“重置”),你的问题实际上是你根本没有改变currentCash. newCash调用此方法之前的内容并不重要。如果price0,你的方法设置newCash = currentCash,然后你设置currentCash = newCash...这与刚才说的一样,currentCash = currentCash所以它只是停留在59


EDIT2:根据答案的另一个编辑......我在edit1中的怀疑是完全正确的。你有:

price=0;

在你的构造函数中。

newCash = currentCash /*59*/ - price /*0*/;
//newCash = 59

currentCash = newCash /*59*/;
//currentCash = 59

什么都没有重置。你只是永远不会改变currentCash.

也许您正在另一个类中接受用户输入,并且需要使用它来设置price. 在这种情况下,您需要创建一个setterfor price

public void setPrice(double newPrice) {
    price = newPrice;
}

或者让cashReserves设置price(我认为前者比后者更可取)。

public void cashReserves(double newPrice) {
    price = newPrice;
    //do everything else your cashReserves method is currently doing
}
于 2013-10-30T15:30:52.307 回答
1

您如何将价格作为输入?

或者

您也可以尝试这样的代码

currentCash= currentCash-price;

无需定义新变量来存储差值。

于 2013-10-30T16:26:27.300 回答