2017-04-19 9 views
0

誰かがこのコードの出力を説明できますか?私は非常に混乱しています。このコードをコンパイルする前に、出力は「4 1 2 3」と思っていました。コードをコンパイルした後は、 "4 2 1 0"になります。なぜ誰かが私にそれを説明できるかどうかわかりません。なぜこのプログラムは "4 2 1 0"を印刷しますか?

public class activity1 
{ 
public static void main(String[]args) 
{ 
//Declare and initialize array 
int []list1 = {3,2,1,4};    
int [] list2 = {1,2,3}; 
list2= list1; 
list1[0]=0; 
list1[1]=1; 
list2[2]=2; 
//Create for loop 
for (int i = list2.length-1; i>=0;i--) 
{ 
System.out.print(list2[i] + " ");//print out the array 
} 
} 
} 

答えて

2

list2= list1;の後にはアレイが1つしかない。 {3, 2, 1, 4}

次に、{0, 1, 2, 4}に変更され、その後に印刷されます。

+0

ありがとうございます!それは理にかなっている! – Jack

0

代入は、list1への参照をlist2変数に移動することです。したがって、両方の変数は同じ配列を参照します。あなたは配列をコピーしたい場合は、あなたがコードがすべての行で何を自分のためにデバッグと見ることができるリスト2.

1

にリスト1から各項目をコピーする必要があります。

public static void main(String[] args) { 
    // Declare and initialize array 
    int[] list1 = {3, 2, 1, 4}; 
    int[] list2 = {1, 2, 3}; 
    list2 = list1; // list1 = [3, 2, 1, 4] list2 = [3, 2, 1, 4] 
    list1[0] = 0; // list1 = [0, 2, 1, 4] list2 = [0, 2, 1, 4] 
    list1[1] = 1; // list1 = [0, 1, 1, 4] list2 = [0, 1, 1, 4] 
    list2[2] = 2; // list1 = [0, 1, 2, 4] list2 = [0, 1, 2, 4] 

    // Create for loop 
    // You are printing list2 in reverse order 
    for (int i = list2.length - 1; i >= 0; i--) { 
     System.out.print(list2[i] + " ");// print out the array 
    } 
} 
関連する問題