Массив объектов класса и доступ в цикле foreach

1
import java.util.Scanner;

class A{
int age;
public static void main(String[] args){
    Scanner s=new Scanner(System.in);
    A[] a=new A[4];
    System.out.println("Enter the elements:");

    for(A i:a){
        i.age=s.nextInt();
    }
}
}

В этом коде я хочу, чтобы пользователь дал ввод, но он генерирует

 Exception in thread "main" java.lang.NullPointerException
     at A.main(a.java:10)

Пожалуйста, направляйте меня с этой ошибкой.

Теги:
class
foreach

1 ответ

2

Вы инициализировали массив, но также забыли инициализировать его элементы.

A[] a=new A[4];

for (int i = 0; i < a.length; i++) {
  a[i] = new A(); 
}

Обратите внимание, что просто делать new A[4]; создает массив, но отдельные ссылки на объект A (a[0], a[1] и т.д.) инициализируются только null.


Если у вас возникли проблемы с визуализацией, почему это так, следующее должно помочь.

A[] a = null;

// NO array object
System.out.println(Arrays.toString(a));

a = new A[4];

// Array object with NO elements
System.out.println(Arrays.toString(a));

for (int i = 0; i < a.length; i++) {
  a[i] = new A(); 
}

// Array object with A() elements
System.out.println(Arrays.toString(a));

Вывод :

null
[null, null, null, null]
[A@15db9742, A@6d06d69c, A@7852e922, A@4e25154f]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню