Это часть домашнего задания.Модификация массива в методах
Для части задания я должен сделать несколько массивов, передать их методам, изменить их там и, в общем, поиграть с ними. Большинство из них я сделал успешно, но у меня проблема с последней частью. Я создаю четыре массива примитивных типов четырьмя недействительными методами. Затем я передаю эти массивы (и массив объектов) в другой метод void, который строит массив объектов, используя значения из массивов. Когда я пытаюсь использовать toString для печати состояния этих объектов, он каждый раз возвращает состояние последнего объекта в массиве (через тесты, Ive обнаружил, что после завершения метода 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;
}
}
Отметьте, что вы подразумеваете под кодом –
Также обратите внимание, что 'System.out.println (wineList [1] .toString() +" \ n ");' каждый раз обращается к одному элементу массива через цикл. Это должно быть 'System.out.println (wineList [i] .toString() +" \ n ");'. –