2017-10-25 5 views
1

アイム渡された配列がソートされているかどうかをチェックしてみてください:なぜarray = array1はarray1 = arrayと同じですか?

public static boolean isSorted(int[] list){ 
    boolean isSorted = true; 
    int[] arr = list; 
    selectionSort(arr); 

    for (int i = 0; i < list.length; i++) { 
     if (arr[i] != list[i]){ 
      isSorted = false; 
      break; 
     } 


     } 
    return isSorted; 
    } 

私は配列listに合格し、リストへの配列arrを等しくするか、何が起こったことは、アレイlistは、ソート後の配列arrに等しくなりましたさ。

そのためのJavaルールは何ですか? arrlistから分離するにはどうすればよいですか?

+2

'int [] arr = list;'は配列をコピーしません。 'int [] arr = list.clone();または' int [] arr = Arrays.copyOf(arr、0、arr.length); 'を使う必要があります。 –

答えて

5

int[] arr = list;は、配列をコピーしません。同じ配列インスタンスを指す変数を宣言するだけです。

int[] arr = list.clone();またはint[] arr = Arrays.copyOf(arr, 0, arr.length);を使用する必要があります。


ただし、ソートされているかどうかをチェックするために配列をソートする必要はありません。各要素をチェックして、次の要素が小さいかどうかを確認してください。 Javaでは、あなたが同じデータを保持するために、異なる構造を有することができるので、線の上に

for (int i = 0; i < arr.length - 1; ++i) { 
    if (arr[i + 1] < arr[i]) return false; 
} 
return true; 
+0

単純にyesですが、なぜ 'list'は私が' arr'だけを使って行うのか? – CODE1010101010101

+0

@ CODE1010101010101あなたのコメントをどのように解析するか分かりません。 –

1
int[] arr = list; 

arrにごlistをコピーしませんが、バックエンドでは、どちらも同じデータ・オブジェクトを参照します。 arrのデータに対する変更は、両方とも同じデータを参照しているため、listのデータにも表示されます。

関連する問題