Java收银机

时间:2015-06-19 06:17:37

标签: java

我刚刚开始做一些java,我想尝试一个简单的收银机程序,它基本上只是计算回来的变化。

public class Customer {
    private int purchasePrice;
    private int moneyGiven;
    private int change;

    public Customer() {
        purchasePrice=0;
    }

    public Customer(int initialPurchasePrice) {
        initialPurchasePrice=purchasePrice;
    }

    public void PurchaseItem(int amount){
        purchasePrice=purchasePrice+amount;
    }

    public void MoneyGiven(int amount){
        int moneyGiven;
    }

    public int getChange(){
        int change=moneyGiven-purchasePrice;
        return change;
    }   
}

public class CustomerTester {
    public static void main(String [] args){
        Scanner keyboard=new Scanner (System.in);

        Customer customer1=new Customer();
        customer1.PurchaseItem(50);
        customer1.MoneyGiven(60);

        System.out.println(customer1.getChange());
    }
}

我的输出由于某种原因最终是-50,当它应该是10.我认为我的主要问题来自MoneyGiven构造函数,但我不知道该放什么。任何帮助将不胜感激。

8 个答案:

答案 0 :(得分:1)

首先使用默认值初始化变量,然后更改代码部分以将金额值设置为给定类变量的金钱。

private int purchasePrice=0;
private int moneyGiven=0;
private int change=0;


public void MoneyGiven(int amount){
moneyGiven= moneyGiven + amount;
}

答案 1 :(得分:1)

问题在于,在您的方法moneyGiven方法中,您只需声明一个变量,而不是将amount设置为您的变量moneyGiven

尝试这样的事情:

public void MoneyGiven(int amount){
    moneyGiven = amount;
}

除此之外,MoneyGiven不是构造函数! (只是因为第一个字母是大写的,并不意味着它是一个构造函数。)构造函数没有任何返回值(void也是一个返回值)。

您可能希望将方法重命名为setMoneyGiven

答案 2 :(得分:1)

这是问题所在。

public void MoneyGiven(int amount){
        int moneyGiven;
    }

您正在使用moneyGiven全局变量和 getChange 方法,您正在使用该变量来获取更改。 你做的是你只是创建新方法局部变量,但没有值分配它。 您需要做的是将金额分配给 moneyGiven 全局变量。正确的方法是

public void MoneyGiven(int amount){
        this.moneyGiven = amount;
    }

这将解决您的问题。

PS - 对于最佳实践,您还可以更改getChange方法,如下所示。

public int getChange(){
        return (moneyGiven-purchasePrice);
    }

或者如果您需要在其他地方使用更改,您可以分配全局变量并返回该值,如下所示。

public int getChange(){
    this.change = moneyGiven-purchasePrice;
    return this.change;
}

此类关键字在此类情况下并不重要。你可以使用没有这个关键字的变量。

答案 3 :(得分:0)

你的moneyGiven方法错了。它应该是

public void MoneyGiven(int amount){
 moneyGiven = moneyGiven + amount;
}

和BTW你的第二个构造函数也是错的,需要像这样:

public Customer( int initialPurchasePrice){
    purchasePrice = initialPurchasePrice;
}

答案 4 :(得分:0)

你的方法Moneygiven是问题所在: 在那里你声明一个你没有使用的局部变量。实际上我猜,你错过了把逻辑放在这个方法中。

 public void MoneyGiven(int amount){
    int moneyGiven;
 }

最后它确实计算0-50

答案 5 :(得分:0)

MoneyGiven的实施缺少作业

public void MoneyGiven(int amount){
    int moneyGiven;
}

应该是

public void MoneyGiven(int amount){
    moneyGiven = amount;
}

这就是int change=moneyGiven-purchasePrice;返回-50moneyGiven0)的原因。

答案 6 :(得分:0)

之所以发生这种情况,是因为您没有将金额分配给moneyGiven。并且您已经在开头声明了所有变量,所以现在只需为它们赋值..

private int purchasePrice;
private int moneyGiven;
private int change;

public void MoneyGiven(int amount){
int moneyGiven; // redeclaring 
}

public int getChange(){

    int change=moneyGiven-purchasePrice; // redeclaring
    return change;
}

所以改成它:

public void MoneyGiven(int amount) {
        moneyGiven = amount; //assigning amount to moneyGiven
    }

    public int getChange() {

        change = moneyGiven - purchasePrice; //assigning values to change
        return change;
    }

答案 7 :(得分:0)

public void MoneyGiven(int amount){
    int moneyGiven;
}

moneyGiven尚未启动,因此默认为0。 将其更改为

int moneyGiven = amount;

它应该有效。目前因为moneyGiven = 0(默认值)和purchasePrice = 50,然后转到

 public int getChange(){
    int change=moneyGiven-purchasePrice;
    return change;
}   

所以,0 - 50 = 50
希望这能解释你的问题。