2014-09-21 3 views
0

Я пытаюсь сохранить уже найденный 2D-массив в 1D-массив для более быстрой обработки позже. Тем не менее, я продолжаю получать исключение nullPointerException, когда пытаюсь заполнить 1D-массив. Случается, что txt-файл имеет количество строк и столбцов, которые мы сначала читаем, чтобы получить количество строк и столбцов для выполнения 2D-массива. Затем каждый индекс считывает следующий элемент данных в txt-файле и сохраняет его в этом индексе до тех пор, пока не будут сохранены все 50 000 целых значений. Это РАБОТАЕТ отлично.Java: Как сохранить 2D-массив в 1D-массиве

Теперь я хочу, чтобы считать, что 2D массив и хранить все элементы в 1D массив для более быстрой обработки позже при поиске ответов без использования списка массива или привести их в порядок, и это хорошо,

int [][] data = null; 
int[] arrayCount = null; 

for (int row = 0; row < numberOfRows; row++) 
{ 
    for (int col = 0; col < numberOfCols; col++) 
    { 
     data[row][col] = inputFile.nextInt(); 
    } 
} 
//Doesn't Work gives me excpetion 
data[0][0] = arrayCount[0]; 

Я попробовал это в течение петель, но независимо от того, что я получаю NullPointerException

+0

Какой язык программирования? Если Java, добавьте тег Java. Если C++, добавьте тег C++ и т. Д. ... Измените свой вопрос, чтобы улучшить его. –

+0

Вы получаете исключение NullPointerException при доступе к переменной, которая была вручную установлена ​​в значение null? Это удивительно. Или, другими словами, проверьте переменную 'arrayCount'. – Tom

+0

2-й массив был установлен на Null на попрошайничестве, и этот массив отлично работает, прежде чем пытаться это сделать. – 2014-09-21 07:22:57

ответ

2

Вы не инициализированы data и arrayCount переменных, инициализировать его следующим образом:

int[][] data = new int[numberOfRows][numberOfCols]; 
int[] arrayCount = new int[numberOfRows * numberOfCols]; 

В вашем случае, чтобы скопировать из 2D в 1D массив, вы можете использовать что-то вроде этого:

numberOfRows = data.length; 
    if (numberOfRows > 0) { 
     numberOfCols = data[0].length; 
    } else { 
     numberOfCols = 0; 
    } 

    System.out.println("numberOfRows : "+numberOfRows); 
    System.out.println("numberOfCols : "+numberOfCols); 

    for (int row = 0, count = 0; row < numberOfRows; row++) { 
     for (int col = 0; col < numberOfCols; col++) { 
      arrayCount[count] = data[row][col]; 
      count++; 
     } 
    } 
+0

Не работает говорит int can not быть преобразованным в int [] – 2014-09-21 08:52:28

+0

Не имеет значения, в arrayCount [count] = data [row] [col] он по-прежнему дает мне исключение нулевого указателя – 2014-09-21 08:56:54

+0

Это работает! Я не понимаю, почему это имеет значение, если оба массива равны нулю? Большое спасибо за вашу помощь! – 2014-09-21 10:12:06