Hey, das ist ein kleiner Teil meines Programms, mit dem ich große Probleme habe. Ich möchte, dass das Programm dem Benutzer eine Fehlermeldung gibt und die Schleife von Anfang an startet, wenn die Eingabe keine Ganzzahl ist, während ich möchte, dass es in den Schalter/Fall weitergeht, wenn es eine ganze Zahl ist. Das ist, was ich bis jetzt bekommen habe, aber es funktioniert nicht, da ich die inputmismatchexception erhalte, wenn es falsch ist und es nicht in den Schalter/Fall weitergeht, wenn es richtig ist?Geben Sie eine Fehlermeldung und starten Sie die Schleife neu, wenn Benutzereingabe nicht den richtigen Datentyp in Java ist, während fortfahren, wenn es ist?
public static void main(String[] args) {
ArrayList<Dog> doglist = new ArrayList<Dog>();
Scanner myscan = new Scanner(System.in);
boolean running = true;
while (running) {
System.out.println("\n************************************");
System.out.println("\nWelcome to the kennel club!");
System.out.println("\n************************************");
System.out.println("\n[1] Register new dog");
System.out.println("[2] Print out list");
System.out.println("[3] Increase age");
System.out.println("[4] Remove dog");
System.out.println("[5] Quit program");
System.out.println("\n************************************");
System.out.println("\nChoose: ");
int option = 0;
boolean inputOk = false;
do {
try {
option = myscan.nextInt();
inputOk = true;
} catch (InputMismatchException e) {
System.out.println("Option must be a number");
myscan.nextLine(); // to consume the \n that remains at the end of the line after using nextInt();
}
}
while (!inputOk);
switch (option) {
case 1:
System.out.println("Write name:");
String name = myscan.next();
System.out.println("Write race:");
String race = myscan.next();
System.out.println("Age:");
int age = myscan.nextInt();
System.out.println("Weight:");
double weight = myscan.nextDouble();
Dog dog = new Dog(name, race, age, weight);
doglist.add(dog);
break;
case 2:
System.out.println("Minimum length of tail:");
double userInput1 = myscan.nextDouble();
for (Dog d : doglist) {
if (d.getTailLength() >= userInput1) {
System.out.println(d.toString());
}
}
break;
case 3:
System.out.println("Name of dog:");
String userInput2 = myscan.next();
int flag = 0;
for (Dog d : doglist) {
if (d.getName().equals(userInput2)) {
d.increaseAge();
d.increasetailLength();
flag = 1;
break;
}
}
if (flag == 0) {
System.out.println("Error, can't find dog with name:" + userInput2);
}
break;
case 4:
System.out.println("Name of dog:");
String userInput3 = myscan.next();
Dog dogToRemove = null;
for (Dog d : doglist) {
if (d.getName().equals(userInput3)) {
dogToRemove = d;
System.out.println("Dog is removed");
}
}
if (dogToRemove == null) {
System.out.println("Error, can't find dog with name: " + userInput3);
} else {
doglist.remove(dogToRemove);
}
break;
case 5:
running = false;//Avslutar loopen och därmed programmet
System.out.println("Program finshed");
break;
default:
System.out.println("Error, choose between [1] [2] [3] [4] [5]");//Felmeddelande om valet är någon annan siffra än de som menyn innehåller
break;
}
}
}
Ich habe dies hinzugefügt, aber das gleiche passiert immer noch. Es wird nicht mit der switch-Anweisung fortgesetzt, wenn es korrekt ist, und stürzt ab, wenn es nicht – mackanmorre
ist. Haben Sie die if-Anweisung nach dem Versuch, diesen Vorschlag auszuprobieren, entfernt? –
ja, das funktioniert so lange wie es richtig ist, aber es kehrt nicht in die Schleife nach der Fehlermeldung zurück? – mackanmorre