2016-09-23 44 views
1

只是爲了練習,我試圖在兩種不同的情況下運行下面的代碼,最初我認爲它們都可以工作,但是當我運行一個程序和一個程序時,這裏是該工作do {}中的變量初始化不會增加

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

    int counter = 0; 
    int number = 1; 
    do{ 
     System.out.println(number); 
     number++; 
     counter++; 
    }while(counter<20); 
} } 

O/P代碼:{高達19獲取打印} 1 2 3 ...

這裏是一個沒有工作的一個

public class Test2 
{ 
    public static void main(String args[]) 
    { 
    int counter = 0; 
    do{ 
     int data = 0; 
     System.out.println(data); 
     data++; 
     counter++; 
    }while(counter<20); 
} } 

O/P :0 0 0 0 ... {獲得pri NT高達19倍}

+4

嗯,是的,你是在循環的每次迭代開始時將'data'初始化爲'0'。目前還不清楚爲什麼你會希望打印其他內容。每次迭代都有一個單獨的'data'變量。如果你不想這樣做,根據你的第一段代碼聲明並初始化它在循環之外...... –

+1

@JonSkeet瞭解它我知道我不應該只是在嘗試,但沒有想到通過! –

回答

4

因爲裏面每次迭代,你的數據字段將被設置爲0,那麼首先您要打印,然後++它

public class Test2 
    { 
     public static void main(String args[]) 
     { 
     int counter = 0; 
     do{ 
      int data = 0; // declare a new data field and initialize to 0 
      System.out.println(data); // display zero 
      data++; // data now is 1 
      counter++; 
     }while(counter<20); 
     } 
    } 
0

輸出是正確的,因爲數據variable在每次迭代中被初始化爲0

public class Test2 
    { 
     public static void main(String args[]) 
     { 
     int counter = 0; 
     do{ 
      int data = 0; System.out.println(data); data++; counter++; 
     }while(counter<20); 
    } } 

考慮做... while循環

假設第一次迭代

1.int data = 0; // data will be 0 
2.System.out.println(data); // prints 0 
3.data++;//Incrementing the data to 1 
4.counter ++;// incrementing the counter to 1 

第二次迭代

1.int data = 0; // data will be again set to 0 
2.System.out.println(data); // prints 0 
3.data++;//Incrementing the data to 1 
4.counter ++;// incrementing the counter to 2 

所以輸出將是數據0,0, 0 .........和計數器將是1,2,.....

數據的範圍將是局部的和重新初始化每一次,以避免你應該把這些變量圈外的問題,就像你第一個代碼示例中完成的