0

これは宿題の一部です。

割り当ての一部として、いくつかの配列を作成し、それらをメソッドに渡し、そこで変更し、一般的にそれらを操作する必要があります。これのほとんどは成功しましたが、最後の部分に問題があります。4 つの void メソッドによって、プリミティブ型の 4 つの配列を作成します。次に、これらの配列 (およびオブジェクト配列) を、配列の値を使用してオブジェクトの配列を構築する別の void メソッドに渡します。toString を使用してこれらのオブジェクトの状態を出力しようとすると、毎回配列内の最後のオブジェクトの状態が返されます (テストを通じて、BuildWine メソッドが終了した後、Wine 配列の値はすべて最後に作成されたオブジェクトの値ただし、toString がメソッド内で出力されると、正しく出力されます。

このように操作するとプリミティブの配列が正しく変更される理由については混乱していますが、オブジェクトの配列はそのような奇妙な方法で変更されます (空白のままにするか、エラーを発生させるか、何かを変更する必要があります。最後に作成されたオブジェクトの値)。お手伝いありがとう。

public class LabSeven {


    public static void main(String[] args) {
        int[] wineAges = new int[5];
        String[] wineNames = new String[5];
        int[] wineQuantity = new int[5];
        double[] winePrice = new double[5];
        Wine[] wineList = new Wine[5]; 

        BuildAges(wineAges);
        BuildNames(wineNames);
        BuildQuantity(wineQuantity);
        BuildPrice(winePrice);
        BuildWine(wineList, wineAges, wineNames, wineQuantity, winePrice);

        for(int i = 0; i < wineList.length; i++){
            System.out.println(wineList[1].toString() + "\n");
        }
    }

    public static void BuildAges(int[] wineAges){
        wineAges[0] = 10;
        wineAges[1] = 23;
        wineAges[2] = 13;
        wineAges[3] = 25;
        wineAges[4] = 50;
    }

    public static void BuildNames(String[] wineNames){
        wineNames[0] = "Chardonay";
        wineNames[1] = "Riesling";
        wineNames[2] = "Merlot";
        wineNames[3] = "Chianti";
        wineNames[4] = "Pinot Noir";
    }

    public static void BuildQuantity(int[] wineQuantity){
        wineQuantity[0] = 10;
        wineQuantity[1] = 14;
        wineQuantity[2] = 4;
        wineQuantity[3] = 7;
        wineQuantity[4] = 1;
    }

    public static void BuildPrice(double[] winePrice){
        winePrice[0] = 100.50;
        winePrice[1] = 75.50;
        winePrice[2] = 45.50;
        winePrice[3] = 200.50;
        winePrice[4] = 1250.50;
    }

    public static void BuildWine(Wine[] wineList, int[]wineAges, String[] wineNames, int[] wineQuantity, double[] winePrice){
        for (int i = 0; i < wineAges.length; i++){
            wineList[i] = new Wine(wineAges[i], wineNames[i], wineQuantity[i], winePrice[i]);
            //System.out.println(wineList[i].toString() +"\n");
        }
    }
}




public class Wine {
    static int age;
    static String type;
    static int quantity;
    static double price;

    public Wine(int wineAge, String wineType, int wineQuantity, double winePrice){
        age = wineAge;
        type = wineType;
        quantity = wineQuantity;
        price = winePrice;
    }

    public String toString(){
        String status = ("Wine's Age: " + age + "\nWine's Type: " + type + "\nWine's Quantity: " + quantity + "\nWine's Price: " + price);

        return status;
    }

}
4

1 に答える 1

4

あなたのクラスでは、作成するインスタンスの数に関係なく、Wineすべての属性を としてマークしました。つまり、クラス全体に対して 1 つの値です。staticコンストラクターは、呼び出されるたびにすべての値を上書きしています。

staticの 4 つのアトリビュートすべてから削除して、作成するオブジェクトWineごとに 1 つの値が存在するようにします。Wine

于 2013-04-24T23:16:25.257 に答える