Я изучаю Java и хотел бы знать, можно ли построить объекты, находящиеся внутри массива, используя цикл foreach. Использование для цикла это очень легко:Использование foreach-loop для построения объектов в массиве
public class Bottle {
double waterAmount;
Bottle(){
waterAmount = 1.0;
}
public static void main(String[] args) {
Bottle[] bottles = new Bottle[3];
//foreach
for (Bottle bottle : bottles) {
bottle = new Bottle();
System.out.println(bottle.waterAmount);
}
//for
for (int i = 0; i<bottles.length;i++){
bottles[i] = new Bottle();
System.out.println(bottles[i].waterAmount);
}
System.out.println("index 1: " + bottles[1].waterAmount);
}
}
Когда я бегу эту программу, используя цикл я получаю:
1.0
1.0
1.0
index 1: 1.0
который нормально, потому что массив бутылок был построен правильно. Когда я выполнить его, используя только Еогеасп есть выход:
1.0
1.0
1.0
Exception in thread "main" java.lang.NullPointerException
at Bottle.main(Bottle.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Так, насколько я понимаю, бутылка внутри Еогеаспа строит каждый объект бутылки, но тогда это не asigning этих новые бутылок к каждому индексу массива так поэтому я не могу ссылаться на бутылки [1]. WaterAmount.
вы будете удивлены, но ответ здесь http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value –
Возможный дубликат [Что такое исключение NullPointerException , и как его исправить?] (http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) –
Обновление локальной переменной 'bottle' внутри вашего цикла foreach никоим образом не будет изменять содержимое массива, из которого была инициализирована эта переменная. – azurefrog