这是我在这里的第一篇文章,请原谅我,如果我不遵守规则。所以我的项目是编写代码来模拟小吃机。小吃机里有饼干和薄荷糖。我们使用GUI与小吃机进行交互以购买饼干/薄荷糖并选择要放入的硬币,镍币和四分之一的数量。以下是Snack Machine文件和Money文件的代码(我没有包含GUI文件给予我们是因为我们不会改变它,我不相信任何错误,因为它给了我们。)
package proj3;
import java.awt.Color;
import java.util.ArrayList;
public class SnackMachine {
private ArrayList<Mints> mints;
private ArrayList<Cookies> cookies;
private Cookies c;
private Mints m;
private Money amount;
public SnackMachine(){
mints = new ArrayList<Mints>();
cookies = new ArrayList<Cookies>();
}
public void addCookies(CookieFlavors flavor, int nrcookies){
for(int i = 0; i < nrcookies; i++){
c = new Cookies(flavor);
cookies.add(c);
}
}
public void addMints(Color color, int nrmints){
for(int i = 0; i < nrmints; i++){
m = new Mints(color);
mints.add(m);
}
}
public Cookies buyCookies(Money money){
if(money.getTotal() != .65){
return null;
}
while(cookies.size() != 0){
amount = money;
amount.addMoney(money);
return cookies.remove(0);
}
if(cookies.size() == 0){
return null;
}
return c;
}
public Mints buyMints(Money money) {
if(money.getTotal() != .35){
return null;
}
if(mints.size() != 0){
return mints.remove(0);
}
if(mints.size() == 0){
return null;
}
return m;
}
public int getNrMints() {
return mints.size();
}
public int getNrCookies() {
return cookies.size();
}
public Money getCashOnHand() {
return amount;
}
}
package proj3;
public class Money {
private int numnickels;
private int numdimes;
private int numquarters;
private final double nickel = 5;
private final double dime = 10;
private final double quarter = 25;
public Money(int nickel, int dime, int quarter){
this.numnickels = nickel;
this.numdimes = dime;
this.numquarters = quarter;
}
public Money addMoney(Money money){
this.numnickels = numnickels + money.numnickels;
numdimes = money.numdimes;
numquarters = money.numquarters;
return money;
}
public int getNickels(){
return numnickels;
}
public int getDimes(){
return numdimes;
}
public int getQuarters(){
return numquarters;
}
public double getTotal(){
double total = ((numnickels * nickel) + (numdimes * dime) + (numquarters * quarter)) / 100;
return total;
}
public String toString(){
String str = "Nickels: " + getNickels() + "\n" + "Dimes: " + getDimes() + "\n" + "Quarters: " + getQuarters() + "\n" + "Total: $" + getTotal();
return str;
}
}
这是我遇到麻烦的地方。我不知道如何让机器添加用户输入的额外资金。金额最初设置为空(对吗?)所以没有初始化它,我不能调用addMoney方法因为它一直给我nullpointer错误。所以我必须将它初始化为Money的货币变量。但是,这将继续将其重置为我接下来输入的任何内容而不添加它。与我把它放在buyMints中时相同。 buyMints中的金额将覆盖buyCookies中的金额,反之亦然。我不希望答案只是一种指针,如'我必须创建一个新方法'或那种东西。我已经坚持了很长一段时间,非常感谢任何帮助!谢谢大家。
P.S:用户必须始终输入准确的更改。饼干为0.65美元,最低限额为0.35美元。如果没有,则会出现购买错误(它在给我们的GUI文件中)。
答案 0 :(得分:2)
您说明amount
最初为空是正确的。为了摆脱NullPointerException,你最初可以给机器Money但是零值,即
private Money amount = new Money(0, 0, 0);
我还会密切关注buyCookies
中的循环。看起来你正在覆盖机器里有多少钱。
我唯一的其他想法是,从外观上看,薄荷糖和饼干之间的唯一区别就是价格。你能结合这两个功能吗?