2011-04-15 3 views
0

Что здесь не так? Я получаю ошибку времени выполнения, когда я запускаю код в Netbeans, говоря «java.lang.ArrayIndexOutOfBoundsException: 0»Почему я получаю «java.lang.ArrayIndexOutOfBoundsException: 0»

Я узнал, что это означает что-то вроде «значение не существует» - но это то, что я пытаюсь сделать - дать пользователю определить значения для размера массива. Помоги пожалуйста.

public static void main(String[] args) { 

    int row = 0; 
    int colum = 0; 

    //Declare 2d array 
    int [][] matrix = new int [row][colum]; 
    //Create input for array size 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter " + matrix[row].length + " rows and " + matrix[colum].length + " colums: "); 
    for (row = 0; row < matrix.length; row++) { 
     for (colum = 0; colum < matrix[row].length ; colum++) { 
      matrix[row][colum] = input.nextInt(); 
    //Input variables to array 


    //Print the array 
    for (row = 0; row < matrix.length; row++) { 
     for (colum = 0; colum < matrix[row].length; colum++) { 
      System.out.println(matrix[row][colum] + ""); 
     } 

     System.out.println(); 
    } 



     } 
    } 








    } 


} 

ответ

2

Две проблемы. Вы должны инициализировать строку и столбец с ненулевыми значениями:

int row = 3; 
int colum = 4; 

Вы не ссылающихся размерами матрицы правильно, вы хотите:

System.out.println("Enter " + matrix.length + " rows and " 
     + matrix[0].length + " colums: "); 

Есть еще несколько плохих ссылок далее вниз. Конечно, вы могли бы просто использовать свои row и column вместо того, чтобы получать длины от matrix.

2

В вашем случае

int [][] matrix = new int [0][0]; 

Средства, не имеющие элемента, индекс начинается с 0, где размер указывается начинается с 1

Go для ArrayList если вы хотите динамический массив

+0

* «размер, который вы указываете, начинается с 1» *, мм, вы только что показали, что оно начинается с 0? – aioobe

+0

Возьмите его как: * где указанный вами размер должен начинаться с 1 * –

+0

индекс 0 = размер 1 –

1

В вашем массиве есть 0 элементов - вы пытаетесь получить доступ к первому (с индексом 0) - который выходит за пределы.

1

Вы создаете массив массивов, который имеет размер 0 в обоих измерениях:

int row = 0; 
int colum = 0; 

//Declare 2d array 
int [][] matrix = new int [row][colum]; 

Если вы попытаетесь индексировать это вы получите ArrayIndexOutOfBoundsException.

Набор row и colum к чему-то> 0.

Массивы в Java имеют фиксированный размер. Когда вы создали массив, вы не можете изменить его размер. Если вам нужно изменить размер во время выполнения, используйте класс коллекции (например, ArrayList) вместо массива.

0
int row = 0; 
int colum = 0; 
int [][] matrix = new int [row][colum]; 

Объявленный массив имеет нулевые строки и нулевые столбцы. Вы ничего не можете хранить в нем.

Исключение происходит здесь:

matrix[row].length 

с row=0, потому что это число столбцов первой строки (массивы начинаются с нуля!), Не существует.

0

Ваша проблема заключается в том, что вы устанавливаете row и column до 0, затем создать двумерный массив размером 0 в обоих направлениях, а затем это:

matrix[row].length 

терпит неудачу, потому что нет записи при индексе 0 - это потребует, чтобы массив имел как минимум размер 1.

Смежные вопросы