2013-11-26 59 views
0

我在創建逆序陣列時遇到了問題。下面是我寫的代碼:創建逆序陣列

public static int[] makeReverse(int number) { 
    int[] rorder = new int[number]; 
    int j = rorder.length; 

    for (int i = 0; i < rorder.length-1; i++) { 

     rorder[j] = i; 
     j--; 
    } 

    return rorder; 

但是當我嘗試運行它,我得到了java.lang.ArrayIndexOutOfBoundsException錯誤。我找不到錯誤。

+0

'rorder [rorder.length]'是非法的。數組基於零。 – SLaks

+1

使用'int j = rorder.length - 1;' –

+0

謝謝Nandkumar多數民衆贊成在修復我的問題 – JayGatsby

回答

0

在你的方法,你必須改變行:

int j = rorder.length; 

int j = rorder.length-1; 

因爲rorder.length將返回數組的大小,但最大數組索引1少大於數組的大小(因爲數組索引從0開始)。

1

引用this post您可以使用ArrayUtils此:

隨着Commons.Lang,你可以簡單地使用

ArrayUtils.reverse(int[] array) 

大多數時候,它的速度更快和更錯誤安全堅持與輕鬆 可用的庫已經通過單元測試和用戶測試,當他們採取 關心您的問題。

0

說這種方法被稱爲與makeReverse(5)你將創建rorder長度5

隨着索引0,1,2,3,4 (remember arrays start at 0)那麼你讓j = rorder.length (with is the same as number which is 5)

然後,在for循環的第一行中,您可以調用不存在的rorder[j] or rorder[5]

2

您可以將j初始化爲rorder.length,並訪問rorder[j]。這顯然是不可能的。您無法訪問索引arr.length。將j更改爲rorder.length - 1將解決該異常。

即使異常得到解決,您所做的不是顛倒數組。你只是將你的數組從rorder.length - 2填充到0從第一個索引到第二個最後(我說第二個最後,b'coz你的循環只迭代到第二個索引)。

你應該做的是,重複,直到數組的長度的一半,並在年底的元素從一開始就交換元素:

for (int i = 0; i < arr.length/2; ++i) { 
    // swap arr[i] with arr[arr.length - i - 1] 
} 
0

你可以這樣說:

public static void main(final String[] args) { 
    final int[] rorder = makeReverse(6); 
    System.out.println(Arrays.toString(rorder)); 
} 

public static int[] makeReverse(final int number) { 
    final int[] rorder = new int[number]; 
    for (int i = number; --i > 0;) { 
     rorder[i % number] = i; 
    } 
    return rorder; 
} 

輸出:

[0, 1, 2, 3, 4, 5] 
1

試試這個,通過你的電話號碼作爲輸入參數

int[] reverse(int input){ 
    int[] reverse = new int[input]; 
    int x = 0; 
    for(int i = input; i>0; i--){ 
     reverse[x] = i; 
     x++; 
    } 
    return reverse; 
} 

它將產生否則在第一次迭代的intinput1

0

變化

int j = rorder.length; 

for (int i = 0; i < rorder.length-1; i++) { 

int j = rorder.length - 1; //Comment 1 

for (int i = 0; i < rorder.length; i++) { //comment 2 
  1. 陣列將是j [4]的一個賦值 - 最大值是j [3]。

  2. for循環在代碼中執行1次迭代的次數太少,例如,如果「number」爲5,「j」將遞減爲0但循環將退出,所以rorder [0]將不會被分配值4.