2017-04-19 64 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;之後只有一個數組。 {3, 2, 1, 4}

然後,它被修改爲{0, 1, 2, 4},然後向後打印。

+0

謝謝!這更有意義! – Jack

0

該分配只是將對list1的引用移動到list2變量中。所以,這兩個變量都引用相同的數組。如果你想在陣列複製,則需要每一個項目從列表1複製到列表2.

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 
    } 
}