2016-11-12 6 views
1

Wenn ich 20 für current5 eingeben, sollte minuteCurrent 240 sein, aber Teil funktioniert weiter, auch wenn minuteCurrent über 240 ist. Warum? Ich habe so viele Dinge ausprobiert, aber sie haben nicht geholfen.Warum ist diese Do-while-Berechnung falsch?

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

Ihr 'Do-While' stoppt immer beim ersten Lauf, weil Sie am Ende" Pause "haben . Hast du vor, eine if-Aussage zu haben? –

+1

Schneiden Sie Ihren Code bitte auf https://Stackoverflow.com/help/mcve herunter. Der ganze "Alarm" wird nicht benötigt. – Robert

Antwort

0

do Teil arbeitet hält auch wenn minuteCurrent ist über 240

Wenn Sie sagen, hält Arbeits: Ich nehme an, Sie bedeuten: arbeitet genau einmal.

Das ist normal; es ist eine Garantie von do. The statements within the do block are always executed at least once.

Vielleicht möchten Sie stattdessen eine normale while Schleife?

Der induktive Fall sollte wie folgt aussehen:

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

Ich bin unklar, was die Wirkung von person1.stopAlarm(); ist, oder wie oft wollen Sie die „Normalisieren“ Nachricht drucken. Dies ist möglicherweise keine vollständige Korrektur Ihres Algorithmus. Aber ich denke, Wechsel von einer do-while zu einer regulären while Schleife sollte zumindest die Verwirrung beheben, die Sie beschrieben haben.

1

Do While-Schleifen anders arbeiten als While-Schleifen.

Beachten Sie, dass die While-Loop-Bedingung jetzt nach dem Do Loop-Körper verschoben wird. Der do while-Schleifenkörper wird immer mindestens einmal ausgeführt, , und wird dann wiederholt ausgeführt, während die while-Schleifenbedingung wahr ist.

See more here.

Wie kann man das Problem beheben? Ändern Sie Ihre while-Schleife so, dass sie wie folgt aussieht:

Außerdem habe ich keine Ahnung, warum Sie eine While-Schleife verwenden. Es wäre viel sinnvoller, nur eine if-Anweisung zu verwenden - es ist dasselbe wie eine while-Schleife mit einer Pause am Ende.

+1

Ich wollte, dass es fragt, ob es nicht weniger als 220 ist. Ich sollte es mit if-Anweisungen machen können, ja. Vielen Dank –