Frage

Für ein Programm, ich schreibe, ich brauche für eine ganze Zahl mit einem Benutzer zu fragen, zwischen 1 und 8 wird mehrfach (Reiniger) Wege versucht haben, dies zu tun, aber keiner von ihnen arbeitete, also bin ich mit dieser links:

    int x = 0;
    while (x < 1 || x > 8)
    {   
        System.out.print("Please enter integer  (1-8): ");

        try
        {
            x = Integer.parseInt(inputScanner.next());
        }
        catch(NumberFormatException e)
        {
            x = 0;
        }
    }

Wo inputScanner ist ein Scanner. Sicherlich gibt es einen besseren Weg?

War es hilfreich?

Lösung

Scanner funktioniert reguläre Ausdrücke, nicht wahr? Warum nicht, wenn sie paßt "^ [1-8] $" zuerst?

Andere Tipps

die nextInt Unter Verwendung von () ist bereits eine Verbesserung einfach vergleichen Methode mit der nächsten (). Und vorher, können Sie die hasNextInt () verwenden, zu vermeiden, dass all diese Bündel von nutzlosen Ausnahmen Haing.

Resultierende in etwa wie folgt:

int x = 0;
do {
  System.out.print("Please...");
  if(scanner.hasNextInt()) x = scanner.nextInt();
  else scanner.next();
} while (x < 1 || x > 8);

Ich hatte eine grafische Oberfläche Rechner zu tun (funktioniert nur mit ganzen Zahlen), und das Problem war, dass Die Tests erlauben konnten keine Ausnahmen geworfen werden, wenn die Eingabe nicht war Ganze Zahl. So konnte ich nicht verwenden

try { int x = Integer.parseInt(input)} catch (Exception e) {dosomethingelse}

Da Java-Programme behandeln im Allgemeinen einen Eingang zu einem JTextField als String Ich habe diese:

if (input.matches("[1-9][0-9]*"){ // String.matches() returns boolean
   goodforyou
} else {
   dosomethingelse
}

// this checks if the input's (type String) character sequence matches
// the given parameter. The [1-9] means that the first char is a Digit
// between 1 and 9 (because the input should be an Integer can't be 0)
// the * after [0-9] means that after the first char there can be 0 - infinity
// characters between digits 0-9

hoffe, das hilft:)

Apache Commons ist dein Freund. Siehe NumberUtils.toInt (String, int)

String input;
int number;

while (inputScanner.hasNextLine())
{
    input = inputScanner.nextLine();

    if (input.equals("quit")) { System.exit(0); }
    else
    {
        //If you don't want to put your code in here, make an event handler
        //that gets called from this spot with the input passed in
        try
        {
            number = Integer.parseInt(input);
            if ((number < 1) || (number > 8))
            { System.out.print("Please choose 1-8: "); }
            else { /* Do stuff */ }
        }
        catch (NumberFormatException e) { number = 0; }
    }
}

Ich mag immer in der vollen Zeichenfolge ziehen, so dass Sie sicher sein können, dass der Benutzer die Enter-Taste gedrückt wird. Wenn Sie nur inputScanner.nextInt() verwenden, können Sie zwei ints eine Zeile enthalten, und es wird in eine, dann die andere ziehen.

Beispielcode:

int x;
Scanner in = new Scanner(System.in);
System.out.println("Enter integer value: ");
x = in.nextInt();

Ein Array kann auch die ganze Zahl zu speichern, verwendet werden.

Sie könnte so etwas wie diese versuchen:

Scanner cin = new Scanner(System.in);
int s = 0;    
boolean v = false;
while(!v){
    System.out.print("Input an integer >= 1: ");

    try {    
        s = cin.nextInt();
        if(s >= 1) v = true;
        else System.out.println("Please input an integer value >= 1.");
    } 
    catch(InputMismatchException e) {
        System.out.println("Caught: InputMismatchException -- Please input an integer value >= 1. ");
        cin.next();
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top