У меня возникли проблемы с тем, как создавать двухмерные массивы объектов. Я попытался продемонстрировать ниже небольшой образец, чтобы воспроизвести ошибку, которую я получаю.Как правильно создать двумерный массив в Java
У меня есть этот класс с именем Узел, который в основном хранит один символ. Этот класс используется внутри класса с именем Test как двухмерный атрибут. Я использовал пользовательский ввод, чтобы установить размер массива и создать его экземпляр внутри метода instantiate(). Затем, используя метод набора, я пытаюсь заполнить карту . Однако компилятор дает мне следующее сообщение об ошибке:
консоли Eclipse Вывод:
Exception in thread "main" java.lang.NullPointerException at Test.populate(Main.java:44) at Main.main(Main.java:77)
Мой вход был:
Enter height: 3 Enter width: 3
Ниже приведен код, я использую, чтобы воспроизвести эту ошибку:
Класс Node:
class Node {
private char content;
Node(){
this.content = ' ';
}
Node(Node node){
this.content = node.getContent();
}
//Setter
public void setContent(char c) {
this.content = c;
}
//Getter
public char getContent() {
return this.content;
}
}
Класс Тест:
class Test {
private Node[][] map;
private int height, width;
public void instantiate(){
Scanner reader = new Scanner(System.in);
System.out.println("Enter height: ");
this.height = reader.nextInt();
System.out.println("Enter width: ");
this.width = reader.nextInt();
map = new Node[height][width];
reader.close();
}
public void populate(){
for(int i=0;i<height;i++)
for(int j=0;j<width;j++){
if((i+j) %2 == 0)
map[i][j].setContent('a');
else
map[i][j].setContent('b');
}
/*
* a b a b
* b a b a ...
* a b a b
* b a b a
* . . .
*/
}
public void print(){
for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
System.out.print(map[i][j].getContent());
}
System.out.println();
}
}
public Node[][] getMap(){
return this.map;
}
}
Основной метод:
public class Main {
public static void main(String[] args) {
Test testing = new Test();
testing.instantiate();
testing.populate();
testing.print();
}
}
код также можно увидеть здесь: http://pastebin.com/agFMmB38
Я все еще привыкаю к Java (наступающем от C++), так что они имеют некоторые различия, которые я еще не мог понять.
Любая помощь была бы принята с благодарностью. Спасибо!
Это сработало! Большое вам спасибо, я боролся с этим в течение нескольких часов, и это было очень просто. – leandrocoutom
Всегда рад помочь! – ifly6