2014-06-16 58 views
0

我有一個數組,並通過循環我比較細胞和它附近的細胞。我得到'超出範圍'的例外, 我該如何解決它?如何不走出陣列的邊界

for (var i = 0; i < array.length ; i++) {        
      if ((++array[i] == array[i+1])) {      
       alert("yes"); 
      } 
      else { 
       alert("no"); 
      } 
     } 
+1

該數組的最後一個元素應與什麼進行比較?它在最後一次迭代時失敗,因爲「i + 1」的結果是一個不對應數組索引的數字。 –

+0

最後的比較是在最後一個元素和它之前的元素之間。 – Damkulul

+0

在這種情況下,現有的兩個答案應該是正確的。 –

回答

2

for (var i=0; i<array.length -1; i++),而不是運行你的循環(因爲你比較反對array[i+1]

+0

我現在試過了,得到相同的異常 – Damkulul

+0

@Damkulul這是你使用的所有代碼嗎? –

+0

@Damkulul:你不能有這個出界的錯誤。每次需要訪問第(i + 1)項時再次檢查您正在測試(我 GameAlchemist

0

只是嘗試:

for (var i = 0; i < array.length - 1; i++) {} 
0

不知道你有什麼考慮,但使用++的外面循環從來不是一個好主意,因爲它可能會令人困惑。使用另一個變量指向數組中的另一個項目,同時與邊界檢查器一起循環更容易調試並保持循環簡單。

//displays 01010 
     //1=2(0),2=2(1),2=4(0),4=4(1),4=5(0) 
     var ptr = 0; 
     var items = new Array (1, 2, 2, 4, 4, 5); 
     for (var i = 0; i < items.length; i++) { 
      ptr++ 
      if(ptr >= items.length)break; 
      if (items[i] == items[ptr]) { 
       console.log(1); 

      } 
      else { 
       console.log(0); 
      } 
     } 

     //or 
     //displays 10001 as each value is increased then compared 
     //2=2(1),3=2(0),3=4(0),5=4(0),5=5(1) 
     ptr = 0; 
     for (var i = 0; i < items.length; i++) { 
      ptr++ 
      if (ptr >= items.length) break; 
      if (++items[i] == items[ptr]) { 
       console.log(1); 
      } 
      else { 
       console.log(0); 
      } 
     }