2017-02-14 57 views
-2

我想知道爲什麼一個循環工作,而另一個循環雖然他們非常相似。Java - while循環表達式

dmCyl循環我想循環直到輸入正整數。這是不起作用的循環。但是,hgtCyl循環會循環,直到用戶輸入一個int爲止。看起來好像(dmCyl < 0)循環完全被忽略了。這是爲什麼?

另外,工作的循環是否會將hgtCyl = scnr.nextInt();放在或其外部。它的位置會改變什麼嗎?

謝謝!

編輯: 設置第一個while while while循環解決了這個問題。
再次感謝!
解決方案:

dmCyl = scnr.nextInt(); 

    do{ 
     System.out.print("please insert positive int"); 
     dmCyl = scnr.nextInt(); 
    }while (dmCyl < 0); 

原始代碼:

int dmCyl = 0; 
int hgtCyl = 0; 

Scanner scnr = new Scanner(System.in); 

while (dmCyl < 0) { 
    System.out.print("Please enter an integer"); 
    scnr.next(); 
} 

dmCyl = scnr.nextInt(); 

這工作循環:

while (!scnr.hasNextInt()){ 
    System.out.print("Please enter an integer"); 
    scnr.next(); 
} 

hgtCyl = scnr.nextInt(); 
+3

作爲一個規則,0永遠不會小於0.所以你的第一個循環立即退出。 – shmosel

+1

或進入循環時dmCyl的值是什麼(並且首次測試dmCyl <0') –

+0

'(dmCyl <0)'是'0 <0',它總是爲false。 –

回答

4

使用做/而

do { 
    System.out.print("Please enter an integer"); 
    dmCyl = scnr.nextInt(); 
} while (dmCyl < 0); 
1

要設置dmCyl零開始,然後你告訴循環只走而它小於零。由於在啓動循環的時候,它已經滿足條件並且永不進入循環。改爲dmCyl等於-1。

1

初始化dmCyl = 0,所以你的說法dmCyl < 0是假的..你應該嘗試添加這樣的事情:while (dmcyl <= 0)

1

這裏從while官方描述的一部分Java Language Specification 14.12,由我標記(粗體字)的相關文字爲:

通過首先評估表達式來執行語句。如果結果是布爾類型的,則會進行拆箱轉換(§5.1.8)。

如果由於某種原因表達式的評估或隨後的拆箱轉換(如果有)突然完成,則由於相同的原因,while語句突然完成。

否則,繼續執行通過基於所得到的值的選擇:

  • 如果該值是真實的,則執行所包含的語句。然後有一個選擇:

    • 如果語句的執行正常完成,那麼整個while語句再次執行,通過重新計算表達式開始。

    • 如果執行語句突然完成,請參閱§14.12.1。

如果(可能拆箱)表達式的值是假的,沒有進一步採取行動和while語句正常完成。

也就是說,表達式檢查之前執行用於第一次循環的內容。如果結果爲false,則內容不會執行並且循環終止。