2015-12-08 59 views
2

在我之前的問題中,我開始知道如何找到數組中最大值的索引值。Java以新陣列作爲輸入,雖然我給源兩次

現在我的問題是我試圖通過交換數組[0]與最大值和另一個交換數組[0]與最小值使2個不同的數組。

在這裏,我能夠做到這一點,但問題是,首先我用最小值交換數組[0]。當我試圖用Max Value交換數組[0]時,被調用的數組是在用[Min]值交換數組[0]之後的數組輸出,但不是輸入中的實際數組。

import java.util.Arrays; 

public class Cook { 
    public static void main(String[] args) { 
     int num[] = { 3, 1, 5, 2, 4 }; 
     int start = 0; 
     int maxEnd = getMaxValue(num); 
     int minEnd = getMinValue(num); 
     System.out.println(Arrays.toString(num)); 
     getMinvalueString(start, maxEnd, minEnd, num); 
     getMaxvalueString(start, maxEnd, minEnd, num); 
    } 

    private static void getMinvalueString(int start, int maxEnd, int minEnd, int[] num) { 
     int[] num1 = num; 
     int temp = num1[start]; 
     num1[start] = num1[minEnd]; 
     num1[minEnd] = temp; 
     System.out.println("After replace Min: " + Arrays.toString(num1)); 

    } 

    private static void getMaxvalueString(int start, int maxEnd, int minEnd, int[] num) { 
     int[] num1 = num; 
     int temp = num1[start]; 
     num1[start] = num1[maxEnd]; 
     num1[maxEnd] = temp; 
     System.out.println("After replace: " + Arrays.toString(num1)); 

    } 

    public static int getMaxValue(int[] num) { 
     int maxValue = num[0]; 
     int getMaxIndex = 0; 
     for (int i = 1; i < num.length; i++) { 
      if (num[i] > maxValue) { 
       maxValue = num[i]; 
       getMaxIndex = i; 
      } 
     } 
     System.out.println(getMaxIndex); 
     return getMaxIndex; 

    } 

    public static int getMinValue(int[] array) { 
     int minValue = array[0]; 
     int getMinIndex = 0; 
     for (int i = 1; i < array.length; i++) { 
      if (array[i] < minValue) { 
       minValue = array[i]; 
       getMinIndex = i; 
      } 
     } 
     System.out.println(getMinIndex); 
     return getMinIndex; 
    } 

} 

這裏雖然我已經有了一個新的數組num1,老一套陣列(num),結果收到了交換。請讓我知道我該如何解決這個問題。

電流輸出

[3, 1, 5, 2, 4] 
After replace Min: [1, 3, 5, 2, 4] 
After replace: [5, 3, 1, 2, 4] 

期望輸出

[3, 1, 5, 2, 4] 
After replace Min: [1, 3, 5, 2, 4] 
After replace: [5, 1, 3, 2, 4] 

由於

+0

什麼是你期待的輸出? – Manu

+0

我想你想複製數組。請參閱http://stackoverflow.com/questions/5785745/make-copy-of-array-java – Manu

回答

4

num1是指在同一陣列中兩個getMinvalueStringgetMaxvalueString方法的一個num,所以進行更改在num1影響num引用的相同陣列,這是您在main方法中聲明初始化的相同陣列。

如果您想保留原數組不變,通過陣列的複製到每一個方法:

getMinvalueString(start, maxEnd, minEnd, Arrays.copyOf(num,num.length)); 
    getMaxvalueString(start, maxEnd, minEnd, Arrays.copyOf(num,num.length)); 
+0

儘管影響數組的方法是'getMinvalueString'和'getMaxvalueString'。 – Manu

+0

@Manu謝謝。我複製了錯誤的方法名稱。 – Eran