Не удается добавить символ в двумерный массив StringBuffer

Кто-нибудь знает, почему я не могу добавить символ в этот массив StringBuffer (в моем примере ниже), и может кто-нибудь показать мне, как мне нужно сделать?

public class test {
    public static void main(String args[]){

        StringBuffer[][] templates = new StringBuffer[3][3];

        templates[0][0].append('h');
    }
}

Мой вывод на этот код:

output:     Exception in thread "main" java.lang.NullPointerException
            at test.main(test.java:6)

Мне бы очень помогло, поэтому если вы знаете какое-либо решение, пожалуйста, ответьте на это

3 ответа

Оператор ниже просто объявит массив, но не будет инициализировать его элементы:

    StringBuffer[][] templates = new StringBuffer[3][3];

Вам нужно инициализировать элементы массива, прежде чем пытаться добавить к ним содержимое. Невыполнение этого приведет к NullPointerException

Добавить эту инициализацию

    templates[0][0] = new StringBuffer();

а затем добавить

    templates[0][0].append('h');

Вам нужно инициализировать буферы, прежде чем добавлять что-либо

templates[0][0] = new StringBuffer();

Другие правильно указали правильный ответ, но что происходит, когда вы пытаетесь сделать что-то вроде templates[1][2].append('h');?

Что вам действительно нужно, это что-то вроде этого:

public class Test {          //<---Classes should be capitalized.

    public static final int ARRAY_SIZE = 3;  //Constants are your friend.

    //Have a method for init of the double array
    public static StringBuffer[][] initArray() {
       StringBuffer[][] array = new StringBuffer[ARRAY_SIZE][ARRAY_SIZE];
       for(int i = 0;i<ARRAY_SIZE;i++) {
            for(int j=0;j<ARRAY_SIZE;j++) array[i][j] = new StringBuffer();
        }
        return array;
    }

    public static void main(String args[]){

       StringBuffer[][] templates = initArray();

        templates[0][0].append('h');
        //You are now free to conquer the world with your StringBuffer Matrix.
    }
}

Использование констант важно, так как разумно ожидать, что размер вашей матрицы изменится. Используя константы, вы можете изменить ее только в одном месте, а не разбросать по всей программе.

Другие вопросы по тегам