2014-02-19 49 views
0

我有這些while循環和語句。它正在做我想要的,打印數組的特定部分。但是,我一直得到一個越界的聲明。我無法弄清楚。我覺得如果我的陳述應該防止指數變大,那麼它已經是。爲什麼這給我這個數組outoutofs錯誤?

注:我已經有一個方法創建這個數組並初始化它的值,所以假設數組是兩個維度。

任何建議如何讓它避免出界?

其目的是,我希望列和行都增加1,直到他們不能再增加。

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]也將拋出一個異常

改變你的if語句下面,*注意<和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的第一部分中的項目數量和你想要的數量在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++; 
     } 

}