исключение NullPointerException

204
26 октября 2018, 03:40

как я понимаю данное исключение говорит о том, что объект не хранит в себе данные, и поэтому при выводе на экран информации, выдает исключение, но я вроде как записываю в переменную значение, и данное исключение не должно появляться, рассудите пожалуйста, тут два класса с наследованием

public class Main extends Field {  
    public static void main(String[] args) {
        new Field().initMap();
        new Field().printMap();
    }
}

второй класс

public class Field  {
    protected final int SIZE = 3;
    protected char[][] map;
    protected final char DOT_EMPTY = '*';
    protected void initMap(){
        map = new char[SIZE][SIZE];
        for(int i = 0; i<SIZE; i++){
            for(int j=0; j < SIZE; j++ ){
                map[i][j] = DOT_EMPTY;
            }
        }
    }
    protected void printMap(){
        for(int i = 0; i<= SIZE; i++){
            System.out.print(i + " ");
        }
        System.out.println();
        for(int i =0; i <SIZE; i++){
            System.out.print((i + 1) + " ");
            for(int j = 0; j < SIZE; j++){
                System.out.print(map[i][j] + " ");
            }
            System.out.println();
        }
        System.out.println();
    }
}

жалуется на строку кода System.out.print(map[i][j] + " "); в классе Field

Answer 1

У вас в двух разных объектах происходит действие:

  • new Field().initMap(); -- создаете новый объект и в нем заполняется его map
  • new Field().printMap(); -- создаете новый объект и в нем обращаетесь к его map, а она пуста, т.к. initMap() не был вызван для него

Правильно так:

public class Main extends Field {  
    public static void main(String[] args) {
        Field field = new Field();
        field.initMap();
        field.printMap();
    }
}
Answer 2

В начало метода printMap() можете добавить проверку на null:

protected void printMap(){
    if(map == null) {
       System.err.println("Map is empty");  //удалить, если вывод ошибки не требуется
       return;
    }
    for(int i = 0; i <= SIZE; i++){
        System.out.print(i + " ");
    }
    System.out.println();
    for(int i = 0; i < SIZE; i++){
        System.out.print((i + 1) + " ");
        for(int j = 0; j < SIZE; j++){
            System.out.print(map[i][j] + " ");
        }
        System.out.println();
    }
    System.out.println();
}
READ ALSO
Hibernate: unknown entity

Hibernate: unknown entity

Хочу научиться использовать Hibernate и разбираю такой пример из книги:

217
GOOGLE аутентификация (silentSignIn) 2018

GOOGLE аутентификация (silentSignIn) 2018

у меня образовался новый вопросНедавно я сделал аутентификацию с помощью google (firebase)

173
Как подключиться к websocket серверу используя Socket.IO библиотеку на Java

Как подключиться к websocket серверу используя Socket.IO библиотеку на Java

Моя задача: считывать каждый 'tick' новой информации, присланной от сокет сервера, никакие данные отправлять на сервер я не буду

180
Размер шрифта TextView по размеру экрана

Размер шрифта TextView по размеру экрана

Есть текстУже с разметкой

143