Почему «переменная может быть только нулевой в этом месте»? - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть это:

    String data[][] = null;
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            data[i][j]= "test";
        }
    }

Но это не работает. Переменные имеют нулевое значение

Ответы [ 8 ]

7 голосов
/ 09 декабря 2011

Ваша первая строка должна быть

 String data[][] = new String[10][10]; 
4 голосов
/ 09 декабря 2011

потому что вы должны сначала инициализировать ваш массив.Рассмотрим массив как «указатель» в C / C ++.Вы должны написать что-то вроде String data[][] = new String[10][10];

3 голосов
/ 09 декабря 2011

Конечно, данные равны нулю, вы прямо сказали.Если вы считаете, что

String data[][] = null;

должен инициализировать 2-мерный массив, а каждое значение равно нулю, вы ошибаетесь.

Например, вам нужно:

String data[][] = new String[10][10]

this инициализировал 2-мерный массив из 100 элементов, то есть массив из 10 элементов, каждый из которых является массивом из 10 элементов.

Массив в Java - этообъект, как и любой другой объект, и, следовательно, должен быть инициализирован с новым.data в вашем примере это ссылка на массив, который сам состоит из ссылок на другие массивы (= объекты).

3 голосов
/ 09 декабря 2011

Массивы в java являются видами объектов и должны быть выделены с помощью new.

Заменить

 String data[][] = null;

с

 String data[][] = new String[10][10];
1 голос
/ 09 декабря 2011

Это потому, что вы присвоили ему значение null. Вам нужно создать массив и присвоить его данным. Попробуйте вместо этого:

String data[][] = new String[10][10]; 
0 голосов
/ 09 декабря 2011

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

2d массив - это как строка и столбец таблицы. Вы должны инициализировать первый размер строки, а затем размер столбца

. Вот пример инициализации

data[][] = new String[5][]; // after this you need to define for 2d array like this
data[0] = new String[2];  
data[1] = new String[3];
data[2] = new String[1];

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

data[][] = new String[5][3] then each row has 3 column
0 голосов
/ 09 декабря 2011

String data[][] - это просто ссылка, которая может содержать двухмерный массив строк. поскольку вы не добавили ни одного объекта в ссылку, он указывает на ноль

так же

String data[][] = new String[10][10];

чтобы добавить объект в ссылку.

0 голосов
/ 09 декабря 2011

Массив назначить значение в качестве типа ссылки.Чтобы присвоить любое значение в нем, вы должны сначала создать его экземпляр, иначе это приведет к ошибке.поэтому вы должны написать следующее:

 String data[][] = new String[10][10];
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            data[i][j]= "test";
        }
    }
...