Benutzereingabe wiederholen, bis die Bedingungen erfüllt sind

Lesezeit: 3 Minuten

Ich muss den Benutzer auffordern, eine Zahl einzugeben, die als Beginn eines Bereichs verwendet werden soll, und dann eine andere Zahl eingeben, die das Ende des Bereichs darstellt. Die Startnummer muss 0 oder größer sein und die Endnummer darf nicht größer als 1000 sein. Beide Zahlen müssen durch 10 teilbar sein. Ich habe einen Weg gefunden, diese Bedingungen zu erfüllen, aber wenn sie nicht erfüllt sind, teilt mein Programm dem Benutzer dies einfach mit Ihre Eingabe war falsch. Ist es mir möglich, es so zu codieren, dass nach den Benutzereingaben überprüft wird, ob die Bedingungen erfüllt sind, und wenn sie nicht zurückgeschleift und erneut eingegeben werden. Hier ist der Code, den ich bisher habe.

    Scanner keyboard = new Scanner(System.in);
    int startr;
    int endr;
    System.out.println("Enter the Starting Number of the Range: ");
    startr=keyboard.nextInt();
    if(startr%10==0&&startr>=0){
        System.out.println("Enter the Ending Number of the Range: ");
        endr=keyboard.nextInt();
        if(endr%10==0&&endr<=1000){

        }else{
            System.out.println("Numbers is not divisible by 10");
        }
    }else{
        System.out.println("Numbers is not divisible by 10");
    }

Ganz einfach mit do-while:

Scanner keyboard = new Scanner(System.in);
int startr, endr;
boolean good = false;
do
{
  System.out.println("Enter the Starting Number of the Range: ");
  startr = keyboard.nextInt();
  if(startr % 10 == 0 && startr >= 0)
    good = true;
  else
    System.out.println("Numbers is not divisible by 10");
}
while (!good);

good = false;
do
{
    System.out.println("Enter the Ending Number of the Range: ");
    endr = keyboard.nextInt();
    if(endr % 10 == 0 && endr <= 1000)
      good = true;
    else
      System.out.println("Numbers is not divisible by 10");
}
while (!good);

// do stuff

  • Nur eine kurze Folgefrage, die (!good) in der while-Anweisung sagt was genau? solange gut = Neuwert?

    – Student

    5. April 2013 um 21:09 Uhr

  • good meint good == true und !good meint good == false (sondern == boolean condition ist im Allgemeinen schlechte Praxis).

    – Bernhard Barker

    5. April 2013 um 21:11 Uhr

  • Das wirft mich immer wieder an IllegalStateException Bei der nextInt() Erklärung.

    – Benutzer3932000

    18. Oktober 2016 um 23:17 Uhr


Sie müssen eine Weile verwenden, so etwas wie:

while conditionsMet is false
    // gather input and verify
    if user input valid then
        conditionsMet = true;
end loop

Sollte es tun.

  • Ich würde empfehlen, den Code näher an Java zu machen – while (!conditionsMet), if (/*user input valid*/)nein then und nein end loop. { und } Optional.

    – Bernhard Barker

    5. April 2013 um 20:52 Uhr


Benutzer-Avatar
Boann

Das universelle Verfahren ist:

  1. Lesen Sie die Eingabe in einer Endlosschleife.
  2. Benutze einen break; Anweisung zum Verlassen der Schleife, wenn die Bedingungen erfüllt sind.

Beispiel:

Scanner keyboard = new Scanner(System.in);
int startr, endr;

for (;;) {
    System.out.println("Enter the starting number of the range: ");
    startr = keyboard.nextInt();
    if (startr >= 0 && startr % 10 == 0) break;
    System.out.println("Number must be >= 0 and divisible by 10.");
}

for (;;) {
    System.out.println("Enter the ending number of the range: ");
    endr = keyboard.nextInt();
    if (endr <= 1000 && endr % 10 == 0) break;
    System.out.println("Number must be <= 1000 and divisible by 10.");
}

Wenn Sie nach einer ungültigen Eingabe nur die Fehlermeldung anzeigen möchten, ohne die anfängliche Eingabeaufforderung zu wiederholen, verschieben Sie die anfängliche Eingabeaufforderung direkt über/aus der Schleife.

Wenn Sie die separate Fehlermeldung nicht benötigen, können Sie den Code neu anordnen, um eine do-while-Schleife zu verwenden, um die Bedingungen zu überprüfen, was nur ein wenig kürzer ist:

Scanner keyboard = new Scanner(System.in);
int startr, endr;

do {
    System.out.println("Enter the starting number of the range.");
    System.out.println("Number must be >= 0 and divisible by 10: ");
    startr = keyboard.nextInt();
} while (!(startr >= 0 && startr % 10 == 0));

do {
    System.out.println("Enter the ending number of the range.");
    System.out.println("Number must be <= 1000 and divisible by 10: ");
    endr = keyboard.nextInt();
} while (!(endr <= 1000 && endr % 10 == 0));

1015060cookie-checkBenutzereingabe wiederholen, bis die Bedingungen erfüllt sind

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy