2016-04-06 161 views
3

這是代碼。我試圖解決它,但我不明白它的輸出是111111?爲什麼這段代碼的輸出是111111?

public class Test { 
     public static void main(String[] args) { 
     int list[] = {1, 2, 3, 4, 5, 6}; 

     for (int i = 1; i < list.length; i++) 
      list[i] = list[i - 1]; 

     for (int i = 0; i < list.length; i++) 
      System.out.print(list[i] + " "); 
     } 
    } 
+0

您對該代碼的作用有什麼瞭解? – Maljam

+0

它的值存儲在一個數組中?我是一名編程初學者,這是我在測試中發現的其中一個問題。 –

+6

嘗試在紙上找出它。它從元素1開始,其中包含2,並將其設置爲等於元素i - 1,其中包含1開始。等等。 – Logan

回答

1
for (int i = 1; i < list.length; i++) 
     list[i] = list[i - 1]; 

相當於:

列表[1] =列表[1-1] =列表[0] = 1
列表[2] =列表[2-1] =列表[1] = 1
list [3] = list [3-1] = list [2] = 1
list [4] = list [4-1] = list [3] = 1
list [5] ] = list [5-1] = list [4] = 1

明白嗎?

0
for (int i = 1; i < list.length; i++) 
      list[i] = list[i - 1]; 

你的這部分代碼會導致列表中所有項的值爲1

When i = 1, list[1] = list[0] = 1; 
when i = 2, list[2] = list[1] = 1; //not 2 because it is already overrided when i = 1. 

....到最後一個。

P/S:嘗試在提問之前逐步瞭解代碼。

0

這都是因爲這個循環中,

for (int i = 1; i < list.length; i++) 
list[i] = list[i - 1]; 

什麼發生的事情是,你的第一個值是1,按照循環它該值分配給list陣列的相應的第二個元素。

這意味着,如果你的列表是應該有像這樣

int list[] = {10, 2, 3, 4, 5, 6}; 

數組的第一個元素,它會打印10,10,10,10,10,10

0

您好我將試圖解釋什麼是這個代碼發生片段

public class Test { 
    public static void main(String[] args) { 
    int list[] = {1, 2, 3, 4, 5, 6}; 

該行等價於下面的代碼

int list[] = new int[6]; 
    list[0] = 1; 
    list[1] = 2; 
    list[2] = 3; 
    list[3] = 4; 
    list[4] = 5; 
    list[5] = 6; 


    for (int i = 1; i < list.length; i++) 
     list[i] = list[i - 1]; 

這個循環是下面的代碼

list[1] = list[0]; 
    list[2] = list[1]; 
    list[3] = list[2]; 
    list[4] = list[3]; 
    list[5] = list[4]; 

相當於這是因爲list[0] = 1是以下

list[1] = 1; 
    list[2] = 1; 
    list[3] = 1; 
    list[4] = 1; 
    list[5] = 1; 


    for (int i = 0; i < list.length; i++) 
     System.out.print(list[i] + " "); 
    } 
} 

相當於這就是爲什麼你得到你所得到的輸出

0

如果你是編程新手,打印調試可以是學習wha的好方法t正在你的程序中進行。我已經把一堆你的程序的打印語句,嘗試運行一下,看看如果你能理解的結果:

public class Test { 
    public static void main(String[] args) { 
     int list[] = {1, 2, 3, 4, 5, 6}; 

     for (int i = 1; i < list.length; i++) { 
      System.out.println("\n\n\nloop number " + i); 
      System.out.println("\ni = " + i); 
      System.out.println("\nThe value at list[i] = " + list[i]); 
      System.out.println("\ni - 1 = " + (i - 1)); 
      System.out.println("\nSo I'm accessing element " + (i - 1) + 
      " in the list for this iteration."); 
      System.out.println("\nThe value at list[i - 1] = " + list[i - 1]); 
      System.out.println("\nEnd of loop " + i); 
      list[i] = list[i - 1]; 
     } 

     for (int i = 0; i < list.length; i++) 
      System.out.print(list[i] + " "); 
    } 
} 

我一般不會用很多的一個簡單的循環,但我想向您展示循環運行時訪問值的不同方式。

你會得到這樣的事情在你的控制檯循環的每次迭代中,它引導你通過什麼值是:

環1號

I = 1

的在列表值[I] = 2

I - 1 = 0

所以我訪問元0中這個迭代列表。

在列表中的值[I - 1] = 1

環1

0

末來看看我的答案在這裏:
Why am I not getting the output I am supposed to be?

反正...答案很簡單...
在第一個循環,打印你的陣列,你會看到你的陣列發生了什麼
這樣的事情:

for (int i = 1; i < list.length; i++){ 
      list[i] = list[i - 1]; 
      System.out(list); 
} 
0

有人發佈了,你的for-loop會導致這個結果(11111)。你還提到你的問題就像「它將值存儲到數組中?」。爲了最好地理解你的問題,就像你試圖從數組中獲取值並將它們存儲到另一個數組中。如果是這樣,這可能是其中一個選項。

public static void main(String []args){ 
     int[] list = {1, 2, 3, 4, 5, 6}; 
     int[] myList = new int[list.length]; 
     for (int i=0; i<list.length; i++){ 
      myList[i] = list[i]; 
     } 
     for (int i = 0; i < list.length; i++) 
      System.out.print(myList[i] + " "); 
    } 
1

輸出是1 1 1 1 1 1因爲第一for語句被遍歷的陣列,命名list,值(即{1, 2, 3, 4, 5, 6}),並與前一個替換每一個,起始於第二一個(索引1;或,正如有人所說,第一個「真正的」第一個是第0個......我離題了)。因此,第二個(索引1)項目的當前值(2)被第一個(索引0)項目的值替換爲1:(list[i] = list[i - 1];其中i = 1)。這繼續向下,直到到達list的末尾。當我們用它之前的值替換每個值時,它們最終都會變成相同的值 - 即數組中的第一項,即1。最後,我們的list{1, 1, 1, 1, 1, 1}有這個值。

下一個for聲明依次打印出更新的list的每個值,然後依次打印一個空格:System.out.print(list[i] + " ");。所以,如您所見,運行此代碼的結果是它打印出1 1 1 1 1 1

只是驅動點回家更直觀的方式,讓我們只映射出list陣列的價值隨着時間的推移:

int i = 1;    // i = 1 
list[i] = list[i - 1]; // list[1] = list[1 - 1]; list[0] == 1 
         // list is now {1, 1, 3, 4, 5, 6} 

i++;     // i = i + 1 # i is now 2 
list[i] = list[i - 1]; // list[2] = list[2 - 1]; list[1] == 1 
         // list is now {1, 1, 1, 4, 5, 6} 

i++;     // i = i + 1; i = 3 
list[i] = list[i - 1]; // list[3] = list[3 - 1]; list[2] == 1 
         // list is now {1, 1, 1, 1, 5, 6} 

i++;     // i = i + 1; i = 4 
list[i] = list[i - 1]; // list[4] = list[4 - 1]; list[3] == 1 
         // list is now {1, 1, 1, 1, 1, 6} 

i++;     // i = i + 1; i = 5 
list[i] = list[i - 1]; // list[5] = list[5 - 1]; list[4] == 1 
         // list is now {1, 1, 1, 1, 1, 1} 

i++;     // i = i + 1; i = 6 
i < list.length;  // i == 6; list.length == 6; 6 < 6 == false 
         // exit the for loop 

我當然希望可以幫助您瞭解在玩概念,此處略更好。祝你好運!

0
int list[] = {1, 2, 3, 4, 5, 6}; 

for (int i = 1; i < list.length; i++) { 
     list[i] = list[i - 1]; 
} 

當i爲1,則分配list[1] = list[0],這裏列表[0]的值是1

然後陣列被更新{1, 1, 3, 4, 5, 6},循環再次

當i爲2,分配list[2] = list[1],這裏列表[1]的值爲1

然後陣列被更新{1, 1, 1, 4, 5, 6},循環再次

以這種方式,陣列是OV erride {1, 1, 1, 1, 1, 1}