2016-06-10 64 views
0

大家好! 我遇到了這種奇怪的Java數組行爲。我無法弄清楚爲什麼sampleArray會隨着類的數組而改變?我覺得這很不自然。Java數組:奇怪的行爲

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

      int sampleArray[] = new int[]{5, -1, 9 ,7 ,3 ,2 ,11 ,0 ,-7 ,6 , 10 ,9}; 
      SortArray testArray = new SortArray(sampleArray); 
      System.out.println("Initial array is:"); 
      System.out.println(testArray.toString()); 

      testArray.sortArray(); 
      System.out.println("Sorted by Bubbles method array is:"); 
      System.out.println(testArray.toString()); 
      System.out.println("Initial array is"); 
      for (int i = 0; i<sampleArray.length; i++) { 
        System.out.print(sampleArray[i]+ " "); 
      } 

}

public class SortArray { 
    private int anArray[]; 

    SortArray (int inputArray[]) { 
     this.anArray = inputArray; 
    } 

    // Classic Bubbles sorting 
    public void sortArray() { 
      int arrayLength = this.anArray.length; 
      for (int i = arrayLength; i > 0; i--) { 
        for (int j = 0; j < i-1; j++) { 
          if (anArray[j+1]<anArray[j]) { 
            int tempVariable = anArray[j]; 
            anArray[j] = anArray[j+1]; 
            anArray[j+1] = tempVariable; 
          } 
        } 
      } 
    } 

    @Override 
    public String toString() { 
      String arrayString = ""; 
      for (int i = 0; i<anArray.length; i++) { 
        arrayString = arrayString + anArray[i]+" "; 
      } 
      return arrayString; 
    } 

}

畢竟我不斷收到:

Initial array is: 
5 -1 9 7 3 2 11 0 -7 6 10 9 
Sorted by Bubbles method array is: 
-7 -1 0 2 3 5 6 7 9 9 10 11 
Initial array is 
-7 -1 0 2 3 5 6 7 9 9 10 11 
Process finished with exit code 0 

所以我們看到,初始陣列正在改變爲好。這是爲什麼發生?這似乎是不合邏輯的,因爲我從不分配sampeArray另一個序列,也不會直接在代碼中進行更改。但這是真的。 如何保持初始數組不受影響?

回答

0

這是通過使用參考原始陣列:

this.anArray = inputArray; 

anArray任何修改,實際上是在原始陣列的變形例(兩個變量指的是完全一樣的Object)。

除此之外,您可以使用Arrays.sort

-1

我已經做了要離開初始陣列不受影響的唯一的事情是改變構造:

SortArray (int inputArray[]) { 
    this.anArray = inputArray.clone(); 
} 
+0

請使用您的問題編輯鏈接添加額外的信息。後回答按鈕應該只用於問題的完整答案。 - [來自評論](/評論/低質量帖/ 12653706) – JonasCz

+0

@JonasCz這**是**的答案。 OP對該數組進行了克隆,以防止使用該引用。 –