2012-12-02 74 views
2

的內容這是我需要做逆向陣列

能力扭轉可變大小的一維陣列中的內容,而無需使用另一臨時數組。

給定一個整數,數字的單維數組,編寫Java代碼以便就地轉換數字的內容,而不使用臨時數組來存儲反轉的內容。 例如,如果數字是{12,34,50,67,88},則提供將更改數字的代碼,以使其內容現在變爲{88,67,50,34,12}​​。

這就是我所擁有的 它無法正常工作。

public static int[] reverseArrayWithoutTempArray(int[] array) { 

     double array [ ]; 

     array = new double [10]; 
     int [ ] num = {12, 34, 50, 67, 88}; 
     int i = 0; 
     int j = a.length - 1; 
     for (i = 0; i < a.length/2; i++, j—){ 
      int temp = a[i]; 
      a[i] = a[j]; 
      a[j] = temp; 
      } 
     return array; 
    } 
+2

它不起作用?我假設'j-'實際上是'j - '? – John3136

+0

這根本不會編譯... – MadProgrammer

+0

函數中的前3個語句是什麼意思?變量'a'從哪裏來? – Dunes

回答

3

它實際上是爲你提供的示例工作正常。這就是我的代碼的樣子:

public static int[] reverseArrayWithoutTempArray(int[] a) { 
    int i = 0; 
    int j = a.length - 1; 
    for (i = 0; i < a.length/2; i++, j--){ 
     int temp = a[i]; 
     a[i] = a[j]; 
     a[j] = temp; 
     } 
    return a; 
} 
+0

謝謝。問題是我有int [] num ...和一個數組都代表相同的事情,以及聲明數組的重複。 – user1871089

0

如果這不是課程,你可以使用ArrayUtils.reverse

+0

「家庭作業」標籤已被棄用。請不要使用它。 – BlackVegetable

+0

查找作業標籤 - 已棄用。 – Jeff

+0

對不起,謝謝指出。我將不再使用作業標籤。 – ThePerson

1

就是這樣:

public static void reverseArrayWithoutTempArray(int[] num) { 
    int j = num.length - 1; 
    for (int i = 0; i < num.length/2; i++, j --){ 
     int temp = num[i]; 
     num[i] = num[j]; 
     num[j] = temp; 
    } 
} 

這種方法的呼叫將是這樣的:

int [] num = {12, 34, 50, 67, 88}; 
reverseArrayWithoutTempArray(num); 
System.out.println(Arrays.toString(num)); //to log 
0

這樣做嗎? (交換方法未實現,但你知道怎麼做了吧?)

public static void reverseIntArray(int[] input) { 

     final int last = input.length - 1; 
     if (last < 0) { 
      return; 
     } 
     for (int i = 0; i < input.length/2 + 1; i++) { 
      if (last - i <= i) { 
       return; 
      } 
      swap(input, i, last - i); 
     } 

    } 
1

你基本的算法是正確的,但你的代碼是一個完整的混亂。

  • array被聲明兩次,一次作爲方法參數,一次作爲局部變量。擺脫當地的參考。
  • 數組num被忽略,不需要任何方式,擺脫它。
  • 我不知道這是否是一個錯字或沒有,但j—j--
0

假設你知道如何實現swap以下逆轉陣列的一部分就地:

public void reverse(int[] a, int low, int hi) { 
    while (low < hi) { 
     swap(low++, hi--, a); 
    } 
} 

然後,您可以調用reverse(a, 0, a.length - 1)來顛倒整個陣列。