scan.nextInt() wiederholen bis eine Zahl eingeben wird

Poppigescorn

Mitglied
Hey,

folgendes Problem:

Ich habe einen scanner für eine Int Zahl, wenn ich ein Zeichen oder Buchstaben eingebe gibt es logischerweise eine exception error. Wie kann ich in einer schleife definieren, dass das Programm die eingabe solange wiederholen soll, bis eine Zahl eingeben wird?
 
Erst mal ein try catch drum herum.

Darum herum eine Schleife mit einem boolean-Erfolgs-Merker.

[CODE lang="java" title="ScanIntCatched"]import java.io.IOException;
import java.util.Scanner;

public class ScanIntCatched
{

public static void main(String[] args) throws IOException
{
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);

int spielerAnzahl = 0;

boolean isExceptionRaised;

do
{
isExceptionRaised = false;

try
{
System.out.println("Gebe eine Spieleranzahl ein");
spielerAnzahl = scanner.nextInt();
}
catch (Exception e)
{
System.out.println( "Dies ist keine Zahl!" );
scanner.next(); // clear scanner
isExceptionRaised = true;
}
}
while ( isExceptionRaised );

System.out.println( "Hurra, Anzahl Spieler: " + spielerAnzahl );
}

}
[/CODE]

Dir bleibt noch überlassen Zahlen kleiner 1 abzuweisen.
 
Mein Lösungsweg
Java:
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        @SuppressWarnings("resource")
        Scanner scan = new Scanner(System.in);

        String spielerAnzahl;
        boolean istZahl = false;

        do {
            System.out.println("Gebe eine Spieleranzahl ein");
            spielerAnzahl = scan.nextLine();

            for (int i = 0; i < spielerAnzahl.length(); i++) {
                if (!Character.isDigit(spielerAnzahl.charAt(i))) {
                    istZahl = false;
                    break;

                } else {
                    istZahl = true;
                }
            }

        } while (!istZahl);

        System.out.println(spielerAnzahl);
    }
}
 
Magst du deine Lösung noch mit uns teilen?
Yes! moment 😀


[CODE lang="java" title="meine Lösung:"]while (check) {
try {
spielerAnzahl = scan.nextInt();
System.out.println("Ihr seid " + spielerAnzahl + " Spieler, richtig?");
answer = scan.next();

if (answer.equals(x)) {
check = false;

if (!check) {
continue;
}
}

do {

while (!(answer.equals(x)) && !(answer.equals(y))) {
System.err.println("Bitte ja oder nein eingeben");
answer = scan.next();

}

System.out.println("Gebe eine Spieleranzahl ein");
spielerAnzahl = scan.nextInt();
System.out.println("Ihr seid " + spielerAnzahl + " Spieler, richtig?");
answer = scan.next();

} while (answer.equals(y) || !(answer.equals(x)) && !(answer.equals(y)));

check = false;

if (!check) {
continue;
}

} catch (InputMismatchException e) {
String err = scan.next();
System.err.println(err + " ist keine Zahl! Wiederholen Sie die Eingabe:");

}

}

}[/CODE]

[CODE lang="java" title="statische variablen"] static Scanner scan;
static int spielerAnzahl;
static String answer = "";
static String x = "ja";
static String y = "nein";
static boolean check = true;[/CODE]
 
Wie wär's, wenn du die Exception als Bedingung verwendest, bzw. die Bedingung für's Weitermachen dann setzt, wenn keine Exception vorkommt?
Java:
    public static void main(String[] args) {
        int number = fetchAIntNumberFromConsole("Zahl bitte: ", "ZAHL!!!! ... bitte: ");
    }

    static int fetchAIntNumberFromConsole(String text, String textIfInputInvalid) {
        if (text != null) {
            System.out.print(text);
        }
        int number = 0;
        boolean noValidInputYet = true;
        Scanner scanner = new Scanner(System.in);
        do {
            try {
                number = scanner.nextInt();
                noValidInputYet = false;
            } catch (InputMismatchException e) {
                System.out.print(textIfInputInvalid);
                scanner.next(); //Um den aktuellen Inhalt zu löschen. Alternativ bei jeder Eingabe einen neuen Scanner erstellen, geht auch.
            }
        } while (noValidInputYet);
        return number;
    }

//und jetzt nochmal ganz ohne Abbruchbedingung
    static int fetchAIntNumberFromConsoleAlternative(String text, String textIfInputInvalid) {
        if (text != null) {
            System.out.print(text);
        }
        Scanner scanner = new Scanner(System.in);
        while(true) {//Endlosschleife
            try {
                return scanner.nextInt(); //Sobald die Eingabe ausgewertet werden kann, wird das Ergebnis geliefert.
            } catch (InputMismatchException e) {
                System.out.print(textIfInputInvalid);
                scanner.next(); //Um den aktuellen Inhalt zu löschen. Alternativ bei jeder Eingabe einen neuen Scanner erstellen, geht auch.
            }
        }
    }
 
Zuletzt bearbeitet:

Zurück
Oben