2011-04-19 65 views
1

我需要以下輸出 實施例的連續編號之間​​的差值:查找在陣列

List  Difference 
1   0 
2   1 
3   1 
4   1 
5   1 

int array [] = {1, 2, 3, 4, 5};

如果使用用於循環

輸出應在形式進行這裏是我使用的代碼,它工作得很好,直到4,但後來在5它說outofbounds,因爲它看着數組w中的位置5這個不存在。所以,我需要幫助!

代碼:

for (int counter = 0; counter < degreedays.length;++counter){ 
    System.out.println("\t" + degreedays[counter] + "\t\t\t" + (degreedays[counter+1] - degreedays[counter])); 
+0

聽起來像家庭作業..... – CtrlDot 2011-04-19 02:49:48

+2

如果這是功課,請標記爲這樣。此外,這個社區在這裏幫助你,而不是爲你做事。所以請告訴我們你到目前爲止做了什麼,以及你被困住了什麼。 – Hristo 2011-04-19 02:49:50

+0

fibunacci serries?好像是這樣。在第二個修改後的版本,它可能看起來像fibunacci – ianace 2011-04-19 02:50:58

回答

1

的問題是,你的代碼循環使用規範數組中的所有指數環,這是很好的;但是,循環體不僅使用索引(counter),而且還使用索引加1(counter+1),該索引超出了數組索引範圍!

更正您的代碼,以便它不嘗試訪問超出範圍的數組元素,例如通過在嘗試使用它之前檢查「counter + 1」是否是有效索引。

1

for循環的最後一次迭代引用的是數組的末尾,因此您得到一個ArrayIndexOutOfBoundsException。您需要將第一次迭代作爲特例處理,因爲它始終爲零。然後,對於循環的其餘部分,減去當前索引減去最後一個索引。例如:

int[] degreedays = new int[] { 1, 2, 3, 4, 5 }; 
for (int counter = 0; counter < degreedays.length; ++counter) { 
    int diff = counter == 0 ? 0 : degreedays[counter] - degreedays[counter - 1]; 
    System.out.println("\t" + degreedays[counter] + "\t\t\t" + diff); 
} 
+0

我認爲,如果連續數字之間的差異是恆定的,如果所有數字都是隨機的,那麼這將起作用。然後我設置第一個元素的差值等於零,但然後循環繼續從下一個數字減去,但是當我們達到5個相同的問題。不是嗎? – 2011-04-19 03:20:36

0

這些類型的事情可以通過各種方式完成。以下是我想做到這一點:

int array [] = {1, 2, 3, 4, 5}; 
int Previous = array[0]; // Keeps previous value of array and is used to print. 
System.out.println("List Difference"); 
for (int I=0; I<array.length(); I++) { 
    int J=I+1; 
    Previous = Previous - array[I]; 
    System.out.println(" "+J+" "+Previous); 
    Previous = array[I]; 
} 

但要注意,因爲它的日期我爲已經學會了用Fortran 66的我的第一語言你的導師會不會欣賞我的代碼風格。

+0

謝謝反正... – 2011-04-19 03:39:18

0

試試這個。

int[] degreedays = new int[] { -81, -2, -3, 10, Integer.MIN_VALUE,1,Integer.MAX_VALUE };// works for random numbers too. 
    if(degreedays != null && degreedays.length > 0) { 
     System.out.println("\t" + degreedays[0] + "\t\t\t0"); 

     for (int counter = 1; counter < degreedays.length; ++counter) { 
      long s = degreedays[counter]; 
      long f = degreedays[counter-1]; 
      System.out.println("\t" + degreedays[counter] + "\t\t\t" + Math.abs(s-f)); 
     } 
    }