2016-11-12 66 views
1

當我爲current5輸入20時,minuteCurrent應該是240,但即使minuteCurrent超過240,部分也會繼續工作。爲什麼?我嘗試了更多的東西,但他們沒有幫助。這是爲什麼 - 而計算是錯誤的?

import java.util.Scanner; 

class Person { 

String name; 
int heartRatePer5; 
int current5; 

void alarm() { 

    for (int i = 0; i < 3; i++) 
     System.out.print("!!! "); 
    System.out.println(); 
} 

void stopAlarm() { 
    System.out.println("Alarm stopped"); 
    } 
} 

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

    Person person1 = new Person(); 

    Scanner input = new Scanner(System.in); 

    System.out.println("Enter the current heart rate per 5 seconds: "); 
    person1.current5 = input.nextInt(); 
    int minuteCurrent = person1.current5 * 12; 
    // minuteCurrent = 0; 

    do { 
     System.out.println("Normalizing."); 
     person1.stopAlarm(); 
     //minuteCurrent = input.nextInt(); 
     break; 
    } 

    while (minuteCurrent < 220); 

} 

}

+0

http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Biffen

+2

你的'do-while'將在第一次運行時總是停止,因爲你最後有'break' 。你的意思是在它之前有一個if語句嗎? –

+1

請將您的代碼修改爲https://stackoverflow.com/help/mcve。整個「警報」是不需要的。 – Robert

回答

0

do部分繼續工作,即使minuteCurrent超過240

當你說保持工作:我假設你的意思是:工作正好一次

這是正常的;這是do的保證。 The statements within the do block are always executed at least once

也許你想要一個正常的while循環呢?

電感情況下應該是這樣的:

while (minuteCurrent < 220) { 
    minuteCurrent = input.nextInt(); 
} 

我不清楚效果的person1.stopAlarm();什麼,或者你想多少次打印的「正常化」的消息。所以這可能不是您的算法的完整解決方案。但我認爲從do-while切換到常規while循環應該至少可以解決您所描述的混淆問題。

1

do-while循環比while循環的工作方式不同。

注意while循環條件現在被移動到do之後,而 循環體。 do while循環體總是至少執行一次, 然後重複執行while while循環條件爲 爲true。

See more here.

你怎麼能解決這個問題?改變你的while循環,看起來像這樣:

while (minuteCurrent < 220) { 
      System.out.println("Normalizing."); 
      person1.stopAlarm(); 
      break; 
} 

此外,我不知道爲什麼你使用while循環。只使用if語句會更有意義 - 與while循環相同,最後會有中斷。

+1

我希望它不斷問它是否不少於220.我應該可以用if語句來做,是的。謝謝 –