我刚刚开始做一些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构造函数,但我不知道该放什么。任何帮助将不胜感激。
答案 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;
返回-50
(moneyGiven
为0
)的原因。
答案 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
希望这能解释你的问题。