Ich versuche, ein wenig Code auszuführen, der nach einem Benutzereingabewert sucht. Diese Aktion ist in einer benutzerdefinierten Methode namens getTriangleDim() enthalten. Die Methode liest den int-Wert des Benutzers ein, stellt sicher, dass sie innerhalb eines bestimmten Bereichs liegt, und gibt dann den eingegebenen int-Wert zurück. Die Methode funktioniert großartig und ich habe keine Probleme damit.Java: Try-Catch-Anweisung in einer Do-While-Schleife
Das Problem tritt auf, wenn ich einen Nicht-Int-Wert für meine getTriangleDim() -Methode eingeben. Es gibt mir einen InputMismatchException-Fehler. Ich habe eine try-catch-Anweisung in eine Do-while-Schleife geschrieben, um dieses Problem zu beheben. Aber das ist das erste Mal, dass ich eine Try-Catch-Anweisung verwendet habe und mir anscheinend etwas fehlt. Hier
ist der Code für die try-catch-Anweisung innerhalb der do-while-Schleife verschachtelt:
//loop to scan for triangle dimension
boolean bError = true;
int triangle;
do{
try {
triangle = getTriangleDim();
bError=false;
}
catch (Exception e){
System.out.println("You did not enter an integer, please enter an integer value");
triangle = getTriangleDim();
}
}while (bError);
wenn ich es testen, indem Sie einen char-Wert anstelle des int eintritt, es fängt tatsächlich den Fehler einmal , und druckt dann meine "Sie hat nicht ....." Aussage. Aber wenn ich wieder eine andere Nicht-Int-Nummer eintrage, bekomme ich wieder einen Laufzeitfehler, der sagt ....... Du hast es erraten ........ InputMismatchException error.
Der Code für meine Methode ist hier:
//method for scanning triangle dimensions from keyboard
public static int getTriangleDim(){
int triangle = 0;
Scanner keyboard = new Scanner(System.in);
do{
System.out.print("Enter a non-zero integer length (+/-1 - +/-16): ");
triangle = keyboard.nextInt();
if((!(triangle <= 16 && triangle >= 1))&&(!(triangle >= -16 && triangle <= -1)))
System.out.println("Inpute value outside of range");
}while((!(triangle <= 16 && triangle >= 1))&&(!(triangle >= -16 && triangle <= -1)));
return triangle;
}
ich die Do-While-Schleife müssen weiter, aber ich halte diese Fehler zu bekommen.
Sie können eine neue Exception 'Klasse NotIntegerException extends Exception definieren {..}' und fangen sie draußen, um es von anderer Art von Ausnahmen jetzt –