2014-10-27 64 views
1

的我正在寫比較若干Ñ的元素的算法n + 1個n-1個JAVA處理陣列索引超出範圍

這意味着第一次和最後一次檢查失敗,因爲array.length + 1會超出範圍,數組[0-1]也會超出範圍。我試圖找到一種方法來阻止程序拋出數組索引超出界限例外,但我不知道如何做到這一點。我最初的計劃是,以檢查陣列[0-1]和長度+ 1總是空像這樣:

numbers[x-1] == null 

但是,這並不因爲不匹配的從int到空工作。任何想法如何補救這將非常感激。

+1

開始你的循環從1到n-1,並在指數1元的0元比較,與第n個元素(N- 1)第一個... – mounaim 2014-10-27 10:40:44

+0

假設你正在爲for(for start(start = i + 1,end = n-2,inC++))做一個'for'循環嗎?這樣,你總是在範圍內。您也可以使用長度函數來確定它是否已達到極限並打破您的循環。 – ha9u63ar 2014-10-27 10:41:48

回答

4

迭代與index 1開始,以指數array.length - 1結束。

for(int i=1;i<array.length-1;i++){ 
    int prev = array[i-1]; 
    int current = array[i]; 
    int next = array[i+1]; 
} 
0

您應該使用「如果」語句來檢查你的索引的範圍內:

if (x >= 0 && x < numbers.length) 
    numbers[x] = someNumber 
0

除了長度檢查其他答案建議,你也可以創建一個數組元素大,所以最後一個元素N + 1仍是一個有效的數組位置,但標誌着數組的結尾。這樣,您可以忘記所有可以提高算法速度的長度檢查 - 如果這很重要。否則,我會執行一個長度檢查。

1

我正對於所述陣列的邊緣的檢查:

int prev = -1; 
int next = -1; 
for (int i=0; i<array.length; i++) { 
    if (i>0) 
     prev = array[i-1]; 
    if (i < array.length - 1) 
     next = array[i+1]; 
    else 
     next = -1; 
    // now do whatever you wish to do with array[i], prev and next 
} 

在這種情況下我選擇-1來表示一個「空」值。你可以使用別的東西,這取決於數組中值的範圍。

0

有些事情,你可以用它來比較與去年和未來元素的數組:

for(int index=1;index<array.length-1;index++){ 
    if (number > numbers[index - 1] && number < numbers[index + 1]) { 
     System.out.println("Number is between " + (index - 1) + " and " + (index + 1)); 
    } 
}