2012-06-26 137 views
0

StackOverflow! 我已經使用了searrch選項,我發現一些相關的答案,但他們沒有解釋爲什麼在Java中的數組的反向排序的這種特殊的方法不起作用:Array(Java)中的手動顛倒順序

class ReverseOrder 
{ 
    public static void main(String[] args) 
    { 
     int x[] = {1,2,3,4,5}; 
     int y[] = x; 

     int i, j; 
     for(i = 0, j = x.length - 1; i < x.length; i++, j--) 
     { 
      y[i] = x[j]; 
     } 

     for(int b = 0; b < x.length; b++) 
     { 
      System.out.println("Inverse order is: " + y[b]); 
     } 
    } 
} 

爲什麼結果5, 4,3,4,5而不是5,4,3,2,1 ???它令我絕對瘋了,對我毫無意義。任何幫助將不勝感激!

回答

7

正因爲如此: INT Y [] = X

y和x現在到同一陣列的引用。你應該確保你初始化y作爲一個新的數組。

+1

對,你需要做int y [] = new int [x.length]; – aglassman

+0

非常感謝!這絕對解決了這個問題。不過,我還有一個額外的問題 - 我現在應該這樣做嗎? int x [] = {1,2,3,4,5}; int y [] = new int [5]; y = x.clone(); 或者也許有更快,更有效的方式呢? 無論如何非常感謝! –

+1

這足以用int y [] = new int [x.lengt]替換int y [] = x,這可確保y被初始化並具有足夠的容量來保存x內容。 Y在循環中填充循環中的值。 – mihaisimi

1
int y[] = x; 

使y指代與x相同的數據。

y[i] = x[j]; 

您還在修改輸入數組x。

你想y以完全獨立:

int y[] = new int[x.length]; 

代替。

+0

哦,謝謝你!那麼比這個更有效的方法是: int x [] = {1,2,3,4,5}; int y [] = new int [x.length]; y = x.clone(); –

1

如果要扭轉到位數組元素的順序(即,直接修改陣列x),則可以通過數組中途迭代,交換元件:

final int last = x.length - 1; 
final int n_2 = x.length/2; // round down for odd lengths 
for (int i = 0; i < n_2; ++i) { 
    int tmp = x[i]; 
    x[i] = x[last - i]; 
    x[last - i] = tmp; 
} 
+0

非常感謝!我聽說過這種方法,但我只是簡單的困惑,並希望在繼續研究Java之前先澄清整個案例:) –

2
class ReverseOrder { 
    public static void main(String[] args) 
    { 

     int x[] = {1,2,3,4,5}; 
     int y[] = new int[5]; // or you could use [x.length] 
     int i, j; 
     for(i = 0, j = x.length - 1; i < x.length; i++, j--) 
     { 
      y[i] = x[j]; 
     } 

     for(int b = 0; b < x.length; b++) 
     { 
      System.out.println("Inverse order is: " + y[b]); 
     } 
    } 
} 
+0

好吧,基本上上面解釋過,x.length,我沒有看到答案在我發佈之前 –

+0

非常感謝!你的人很快回答和幫助!我希望我能給你一切,並將每個人的回答標記爲已接受!但我只是註冊:) –