1

これが私の最初の投稿ですので、ルールに従わない場合は失礼します。だから私のプロジェクトはスナックマシンをシミュレートするコードを書いています。スナックマシンにはクッキーとミントがあります。GUIを使用してスナックマシンとやり取りし、クッキー/ミントを購入し、入れるダイム、ニッケル、クォーターの量を選択します。次のスナックマシンファイルとマネーファイルのコードは次のとおりです(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;
    }
}

これは私が問題を抱えているところです。ユーザーが入力した追加のお金をマシンに追加する方法がわかりません。金額は最初はnull(右?)に設定されているため、初期化しないとaddMoneyメソッドを呼び出すことができず、nullpointerエラーが発生し続けます。したがって、Moneyのmoney変数に初期化する必要があります。しかし、これにより、追加せずに次に入力したものにリセットされ続けます。BuyMintsに入れたときと同じです。BuyMintsの金額は、buyCookiesの金額を上書きし、その逆も同様です。「新しいメソッドを作成する必要がある」などのような、単なるポインタのような答えを期待しているわけではありません。私はかなり長い間これに固執していて、本当に助けていただければ幸いです!皆さん、ありがとうございました。

PS:ユーザーは常に正確な変更を入力する必要があります。クッキーの場合は$.65で、ミントの場合は$.35です。そうでない場合は、購入失敗エラーが発生します(これは、提供されたGUIファイルにあります)。

4

1 に答える 1

2

amountあなたはそれが最初はヌルであると述べているのは正しいです。NullPointerExceptionを取り除くために、最初はマシンにMoneyを与えることができますが、値はゼロです。

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

のループも詳しく見ていきますbuyCookies。マシンにいくらのお金があるかを上書きしているようです。

私が持っている他の唯一の考えは、その見た目からすると、ミントとクッキーの唯一の違いは価格であるということです。これら2つの機能を組み合わせることができますか?

于 2012-11-10T19:12:21.740 に答える