java零食机添加总量

标签 java currency

这是我在这里发表的第一篇文章,如果我不遵守规则,请原谅。所以我的项目是编写代码来模拟小吃机。零食机里有 cookies 和薄荷糖。我们使用 GUI 与零食机交互来购买 cookies /薄荷糖,并选择要放入的一毛钱、镍币和 25 美分硬币的数量。这是以下零食机文件和货币文件的代码(我没有包含 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;
    }
}

这就是我遇到麻烦的地方。我不知道如何让机器添加用户输入的额外资金。 Amount 最初设置为 null(对吗?),因此在没有初始化它的情况下,我无法调用 addMoney 方法,因为它一直给我空指针错误。所以我必须将它初始化为Money的货币变量。但是,这将继续将其重置为我接下来输入的任何内容,而不添加它。和我把它放进 buyMints 时一样。 buyMints 中的金额将覆盖 buyCookies 中的金额,反之亦然。我并不期望得到一个答案,只是一种指针,如“我必须创建一个新方法”或类似的东西。我已经坚持这个问题很长一段时间了,非常感谢任何帮助!谢谢大家。

P.S:用户必须始终输入准确的零钱。 cookies 价格为 0.65 美元,薄荷糖价格为 0.35 美元。如果没有,将会出现购买失败错误(在提供给我们的 GUI 文件中)。

最佳答案

您的说法是正确的,amount 最初为空。要摆脱 NullPointerException,您可以最初给机器 Money,但值为零,即,

private Money amount  = new Money(0, 0, 0);

我还会仔细查看 buyCookies 中的循环。看起来你正在覆盖机器里的钱。

我唯一的其他想法是,从外观上看,薄荷糖和 cookies 之间的唯一区别是价格。你能结合这两者的功能吗?

关于java零食机添加总量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13324889/

相关文章:

java - Java 中的矩阵和 vector 数组

java - 在java中为各种语言环境格式化给定的货币? (四舍五入问题)

Javascript 如何将整数格式化为货币字符串?

angularjs - Angular 上的印度尼西亚货币

java - Java 项目中的自动更新属性文件值

java - 使用RSocketFactory的替换

java - Hibernate 更新对象中的所有列

java - 检查从哪个线程调用方法

c# - 将 Double 变量转换为 Decimal

c# - 如何将十进制属性格式化为货币?