2017-06-13 4 views
0

Versuchen, Java mit meinem Sohn zu lernen. Ich habe jede Wortkombination gegoogelt, aber ich kann keine Antwort finden. Ich würde jede Hilfe oder Richtung schätzen.mooc java Übung 78, Begrenzter Zähler akzeptiert keine Benutzereingabe

Das Programm nimmt die Benutzereingabe für Minuten/Stunden nicht auf, um den Zähler zu initiieren. So beginnt Zähler um 00:00:50 für Eingabe von 23:59:50. Hier ist mein Code bisher:

Hauptklasse:

import java.util.Scanner; 

public class Main { 

public static void main(String[] args) { 
    Scanner reader = new Scanner(System.in); 

    BoundedCounter seconds = new BoundedCounter(59); 
    BoundedCounter minutes = new BoundedCounter(59); 
    BoundedCounter hours = new BoundedCounter(23); 

    System.out.print("seconds: "); 
    int s = Integer.parseInt(reader.nextLine()); 
    System.out.print("minutes: "); 
    int m = Integer.parseInt(reader.nextLine()); 
    System.out.print("hours: "); 
    int h = Integer.parseInt(reader.nextLine()); 

    seconds.setValue(s); 
    minutes.setValue(m); 
    hours.setValue(h); 


    int i = 0; 
    while (i < 121) { 
     System.out.println(hours + ":" + minutes + ":" + seconds); 

     seconds.next(); 

     if(seconds.getValue()== 0){ 
     minutes.next(); 
     } 
     // if minutes become zero, advance hours 
     if(minutes.getValue()== 0 && seconds.getValue()== 0){ 
      hours.next(); 
     } 
     i++; 
    } 


} 
} 

public class BoundedCounter { 
    private int value; 
    private int upperLimit; 

public BoundedCounter(int upperLimit){ 
    this.value = 0; 
    this.upperLimit = upperLimit; 
} 
public void next(){ 
    if(value < upperLimit){ 
     value++; 
    } 
    else { 
     this.value = 0; 
    } 
    } 

public String toString(){ 
    if(value < 10){ 
     return "0" + this.value; 
    } 
    else{ 
    return "" + this.value; 
} 
} 
public int getValue(){ 
    return this.value; 
} 
public void setValue(int newValue){ 
    if(newValue > 0 && newValue < this.upperLimit){ 
     this.value = newValue; 
    } 

} 
} 
+0

danke Steve! – Tami

+0

Ich hatte gerade das Problem gefunden: meine setValue if-Anweisung ignorierte die Eingabe, weil es das obere Limit war. Durch Ändern in newValue <= this.upperLimit wurde die Eingabe erkannt. – Tami

Antwort

0

Zwei Vorschläge.

Ersetzen Sie while usw. durch for (int i = 0; i < 121; i ++). Ihr Weg funktioniert, aber die Verwendung für ist der häufigere Ansatz.

Sie könnten Ihre Eingabe anders eingeben, mit den Sekunden in einer Zeile, dann die Minuten in der nächsten und dann die Stunden in einer dritten Zeile. Beachten Sie, dass Sie die Werte in umgekehrter Reihenfolge lesen. Das sollte deinen bestehenden Code funktionieren lassen.

Oder sehen Sie sich die API an. useDelimiter() verwendet einen regulären Ausdruck, der ein Trennzeichen festlegt. In Ihrem Fall sollte ":" funktionieren. Verwenden Sie dann nextInt(). Natürlich wird dies eine Ausnahme auslösen, wenn Sie die Eingabe vertippen.

Viel Glück!