2014-02-19 5 views
0

У меня есть этот цикл while и for. Он делает именно то, что я хочу, печатая определенные части массива. Тем не менее, я продолжаю получать заявление за пределы. Я не могу понять. Я чувствую, что мой оператор if должен помешать индексу получить больше, чем он уже есть.Почему это дает мне эту ошибку arrayoutofbounds?

Примечание: У меня уже есть метод вне этого создания этого массива и инициализация его значений, поэтому притворяйтесь, что массив имеет два измерения.

Любые предложения, как я могу удержать его от выхода из пределов?

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

int columnincrement = 0; 
    String spacing = "\t"; 
    int diagcol=0; 
    int diagrow=0; 
    while(diagcol<themainarray[columnincrement].length) 
    { 

      System.out.println(spacing+themainarray[diagcol][diagrow]); 
      spacing+= "\t"; 
      System.out.print("\n"); 

      if (diagcol<=themainarray[columnincrement].length) 
      { 

      columnincrement++; 
      diagcol++; 
      diagrow++; 

      } 


    } 
+2

Рассмотрите возможность отладки проблемы. –

+1

(И что такое сообщение об исключении?). Коэффициенты - это сообщение об исключении, которое точно указывает, что именно.) –

+0

'Исключение в потоке" main "java.lang.ArrayIndexOutOfBoundsException: 3 \t at TwoDimensionalArray.mainDiagonal (TwoDimensionalArray.java: 162) \t at TwoDimensionalArray.main (TwoDimensionalArray.java:38)) ' – munchschair

ответ

2

массивы основаны на 0.

arr[arr.length] также сгенерирует исключение

изменить ваше заявление, если к следующему, * отметить < и THHE -1;

if (diagcol<themainarray[columnincrement].length - 1) 

Если вы сделаете это изменение, по крайней мере, есть шанс, что ваш код будет работать без indexoutofbounds исключения. это не 100% шанс.


Если themainarray.length меньше, чем themainarray[columnincriment].length вы также получите исключение, потому что нигде не вы против проверки themainarray.length

+0

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

+0

Это из-за циклов while? Я имел их изначально как для циклов, но у меня есть исключения. Я решил, что попробую что-нибудь еще. – munchschair

+0

@munchschair это больше о том, что вы используете 'digacol' для проверки длин массивов, индексированных другими значениями –

0

Я думаю, что вы проверяли неправильные вещи. Похоже, в то время, когда вы хотели, чтобы количество элементов в первой части d2array и оператор if вы хотели получить количество элементов во второй части 2darray. Это может сработать:

int columnincrement = 0; 

String spacing = "\t"; 
int diagcol=0; 
int diagrow=0; 
while(diagcol<themainarray.length) { 
     System.out.println(spacing+themainarray[diagcol][diagrow]); 
     spacing+= "\t"; 
     System.out.print("\n"); 

     if (diagrow<=themainarray[columnincrement].length) { 
      columnincrement++; 
      diagcol++; 
      diagrow++; 
     } 

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