2016-08-09 113 views
-4

Ich bin neu in Java (eigentlich nur an meinem dritten Tag), aber genieße es, mich selbst zu drängen, wenn es darum geht, ein neues Stück Code zu lernen. Ich habe MATLAB im Rahmen meines Studiums gelernt. Im Wesentlichen gehe ich gerne einen Schritt weiter als das, was jede einzelne Lektion zu lehren versucht.Java: Wie Benutzereingaben validiert werden?

Ich schreibe gerade einen grundlegenden Rechner, der zwei Zahlen addieren, subtrahieren, multiplizieren und teilen kann und dieses Kernelement richtig arbeiten lässt. Mein "ein Schritt weiter" war in diesem Fall, das Programm zu wiederholen, mit der Möglichkeit, über Benutzereingaben zu beenden und Fehler aufgrund ungültiger Benutzereingaben zu vermeiden.

Ich konnte die wiederholenden und die abgehenden Abschnitte dieses kleinen Projekts abschließen, konnte jedoch Fehler aufgrund ungültiger Benutzereingaben nicht verhindern, die durch die Eingabe eines Strings anstelle des gewünschten Int oder Double verursacht wurden. Mein Ziel ist es, den Fehler zu vermeiden und stattdessen nach einer gültigen Eingabe zu fragen.

Von dem, was ich gesammelt habe, kann mein Problem durch die Verwendung einer Try/Catch-Anweisung behoben werden, aber ich habe keine Ahnung, wie man eine solche Aussage korrekt implementiert. Meine besten Versuche, ähnlichen Online-Beispielen zu folgen, wurden mit Misserfolg getroffen, was meiner Meinung nach einfach auf die Art und Weise zurückzuführen ist, wie ich das Programm selbst programmiert habe. Wie gesagt, ich bin neu und habe viele While Loops verwendet, um das gewünschte Verhalten zu erreichen, und das ist wahrscheinlich eine schrecklich ineffiziente Art, Dinge zu tun.

Hoffentlich jemand in der Lage, mich in der richtigen Richtung zu zeigen,
Conor

Mein bester Versuch so weit:

int InputValue; 
InputValue = 1; 
while (InputValue == 1) 
{ 
    try 
    { 
     System.out.print ("Enter First Number: "); 
     First = Input.nextDouble(); 
     InputValue = 0; 
    } 
    catch (NumberFormatException e) 
    { 
     System.out.println ("Invalid Input"); 
     System.out.println (" "); 
     System.out.print ("Enter First Number: "); 
     First = Input.nextDouble(); 
    } 
} 

Aber wie bereits erwähnt, das scheint „First“ unsichtbar zu machen der Rest meines Codes mit dem Fehler:
„die lokale Variable Zunächst kann nicht initialisiert wurden“

auch versucht:

Dies ermöglicht die Ausführung des Codes, behebt jedoch nicht den ungültigen Eingabefehler.

Und ich glaube nicht, dass ich einen Booleschen verwenden können, wie das ist, was mein ganzes Programm Looping (? Oder können Sie mehrere Boolesche verwenden habe ich versucht, dass und bekam Fehler)

http://pastebin.com/TTuCNQbx
- Mein Programm, knapp über 100 Zeilen lang
- Interessengebiet zwischen ~ 45 und 85

+0

Es gibt Unmengen von Tutorials gibt :) Bitte kommen Sie zurück, sobald Sie sie haben versucht, und wenn Sie noch fest und lassen Sie uns helfen dann. Verwenden Sie zuerst Google. –

+0

Mögliches Duplikat von [Validieren der Eingabe mit java.util.Scanner] (http://stackoverflow.com/questions/3059333/validating-input-using-java-util-scanner) – xenteros

+0

Offensichtlich habe ich nicht genug erklärt Post, aber ich habe Google verwendet und ein paar ähnliche Beispiele in diesem Forum gefunden. Wenn ich jedoch versuchte, einem ähnlichen Prozess zu folgen (mit Try/Catch), brach es effektiv jeden Code nach diesem Abschnitt. Der beste Weg, um es zu beschreiben, war, dass ich Try/Catch für die Variable "First" verwendete und dann Code, der dieser Anweisung folgte, nicht finden konnte. " –

Antwort

0
boolean firstNumber = false; 
while (!firstNumber) { 
    try { 
     First = Input.nextDouble(); 
     firstNumber = true; 
    } catch (InputMismatchException e) { 
     firstNumber = false; 
     Input.nextLine(); 
    } 
} 

Dies sollte Schleife, bis aa richtigen Eingang eingegeben. Ich würde empfehlen, einige System.out-Ausgabe hinzuzufügen, um den Benutzer wissen zu lassen, dass seine Eingabe ungültig war und wie eine korrekte Eingabe aussehen könnte.

0

Tatsächlich gibt jeder Benutzer String s ein. Dann müssen Sie die String validieren, wenn es für Sie akzeptabel ist oder nicht.

Nehmen wir an, Sie bereits Benutzereingabe in String input gespeichert haben:

String input; 
//some code for getting the input 
try { 
    double dbl = Double.parseDouble(input); 
} catch (NumberFormatException e) { 
    e.printStackTrace(); 
} 

Dies ist die allgemeine Konstruktion für String in double Parsen.Jetzt können Sie es in eine Schleife einfügen, die die Eingabe scannt, bis Sie finden, was Sie wollten. Fühlen Sie sich frei, Flaggen z.

boolean found = false; 
try { 
    double dbl = Double.parseDouble(input); 
    found = true; //this line won't be executed if parsing fails 
} catch (NumberFormatException e) { 
    e.printStackTrace(); 
    found = false; 
} 
+0

" "found = false" im catch-Block ist nicht notwendig, weil gefunden wird bleiben falsch, wenn eine Ausnahme geworfen wird, wie Sie richtig gesagt :) –

+0

@progressive_overload Ich weiß, aber ich habe es dort platziert, falls das OP den Code ändert – xenteros

0

Surround die Linien wie Input.next * im Code mit try/catch-Block. Fangen Sie die Runtime oder in besonders InputMismatchException (best practice) wie unten,

boolean Run = true; 
    while (Run) 
    { 
     Scanner input = new Scanner (System.in); 
     int i = 0; 
     try 
     { 
      i = input.nextInt(); 
     } 
     catch(InputMismatchException ime) 
     { 
      System.out.println("message to enter the input in valid format"); 
     } 
    }