2013-11-16 4 views
0
 String[][] tArray=new String[2][4]; 

    for (int row=0; row<=2;row++){ 

     for (int col=0,count=0;col<=4;col++ ,count++){ 
      Scanner input=new Scanner(System.in); 
      System.out.print("Please Enter the name " +count+ ":"); 
      tArray[row][col]=input.next(); 
     } 

    } 

    for (int row=0; row<=2;row++){ 

     for (int col=0;col<=4;col++){ 
      System.out.println(tArray[row][col]); 
     } 

    } 

Ошибка: -Как избавиться от этой ошибки java.lang.ArrayIndexOutOfBoundsException?

Исключение в потоке "основного" java.lang.ArrayIndexOutOfBoundsException: в array.testArray.main (testArray.java:15)

ответ

0

Причина: Вы повторяете цикл больше, чем длина элементов.

проблема здесь:

String[][] tArray=new String[2][4];//means 2 rows and 4 columns 

for (int row=0; row<=2;row++)//row 0 to 2 => 0,1,2 iterates 3 times 
{ 

    for (int col=0,count=0;col<=4;col++ ,count++)//column 0 to 4 => 0,1,2,3,4 iterates 5 times 
    { 
    //code 
    } 

} 

for (int row=0; row<=2;row++)//row 0 to 2 => 0,1,2 iterates 3 times 
{ 

    for (int col=0;col<=4;col++)//column 0 to 4 => iterates 0,1,2,3,4 
    { 
    //code 
    } 

} 

Решение:

String[][] tArray=new String[2][4]; 

    for (int row=0; row<2;row++){ 

     for (int col=0,count=0;col<4;col++ ,count++){ 
      Scanner input=new Scanner(System.in); 
      System.out.print("Please Enter the name " +count+ ":"); 
      tArray[row][col]=input.next(); 
     } 

    } 

    for (int row=0; row<2;row++){ 

     for (int col=0;col<4;col++){ 
      System.out.println(tArray[row][col]); 
     } 

    } 
+0

Спасибо большое ... :) – k9yosh

+0

Спасибо. Я сделал изменения. но он отображает ту же ошибку, ** Исключение в потоке «main» java.lang.ArrayIndexOutOfBoundsException: \t at array.testArray.main (testArray.java:23) ** отображает до 4 элементов. Я думаю, что это связано с последней ** для ** цикла. Можете ли вы, пожалуйста, помочь мне с этим? – k9yosh

+0

Пожалуйста, поделитесь модифицированным кодом –

2

Проблема заключается в

 for (int col=0,count=0;col<=4;col++ ,count++){ 

вы можете идти только до 3, а не 4, а индексы начинаются с 0. Используйте эту

 for (int col=0,count=0;col<4;col++ ,count++){ 

же здесь

for (int row=0; row<=2;row++){ // incorrect 

сделать

for (int row=0; row<2;row++){ 
+0

'для (INT строки = 0; строке <= 2, строка ++) {' не так, как хорошо. –

+0

Спасибо! добавили это в ответ. –

+0

Спасибо большое ... :) – k9yosh

2

Помните, что индексы Java начинаются с нуля и заканчиваются в length - 1! Вы пытаетесь найти три «строки» из массива, где Есть только два:

for (int row=0; row<=2;row++){ //0, 1, 2 - that's three options even though the array's size is only 2 

и также пять столбцов, где есть только четыре:

for (int col=0,count=0;col<=4;col++ ,count++){ //0, 1, 2, 3, 4 - that makes five 

Использование < вместо <= должен исправить эту конкретную проблему, хотя я бы также рекомендовал использовать атрибут length массива, чтобы каждый раз определять фактический размер массива, а не жестко кодировать его. Это безопаснее от человеческих ошибок и работает, даже если вы измените размер вашего массива:

for (int row=0; row < tArray.length; row++){ 

и

for (int col=0,count=0;col < tArray[row].length; col++ ,count++){ 

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

+0

Большое спасибо ... :) – k9yosh

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