正在建立书店系统 其中一种方法会要求用户输入书名然后描述书的代码。 我的问题是,如果有“InputMismatchException”,我怎么能回忆起尝试。 我的意思是捕获将打印到secreen“错误的输入!”但我想提示用户再次输入
这是我的代码
public void add(){
try{
System.out.println("Enter the book code :");
int c = s.nextInt();
try{
System.out.println("Eneter the book quantity");
int q = s.nextInt();
try{
System.out.println("Eneter the book description");
String d = s.next();
try{
System.out.println("Eneter the book cost price");
double cp = s.nextDouble();
try{
System.out.println("Eneter the book selling price");
double sp = s.nextDouble();
try{
System.out.println("Enter status: [a for available - u for unvailable]");
String input = s.next();
if(input.equals("a")) {
System.out.println("available: ");
}
else if (input.equals("u")) {
System.out.println("unavailable ");
}
else {
System.out.println("Wrong Input");
}
try{
System.out.println("enter the discount on the item \"if exsist\"");
double dis = s.nextDouble();
}catch(InputMismatchException e){
System.out.println("Wrong Input");
}
}catch(InputMismatchException e){
System.out.println("Wrong input");
}
}catch(InputMismatchException e){
}
}catch(InputMismatchException e){
System.out.println("WRONT INPUT!!");
}
}catch(InputMismatchException e){
System.out.println("WRONG INPUT!!");
}
} catch(InputMismatchException e){
System.out.println("Wrong input. NUMBERS only!!");
}
} catch(InputMismatchException e){
System.out.println("You have to enter a NUMBER only");
}
答案 0 :(得分:0)
您需要某种循环,while
或do-while
。
boolean invalidInput;
do {
invalidInput = false;
try {
System.out.println("Enter the book quantity");
int q = s.nextInt();
} catch (InputMismatchException e) {
System.out.println("Please enter a valid integer."); // this is more polite
invalidInput = true; // This is what will get the program to loop back
s.nextLine();
}
} while (invalidInput);
如果你这样做,你不需要嵌套所有try/catch
块;执行一个输入直到它有效,然后执行下一个输入,等等。
正如一位评论者所说,最好将每个输入放在一个方法中。如果您这样做,则不需要boolean
:
private int getBookQuantity() {
while (true) {
try {
System.out.println("Enter the book quantity");
int q = s.nextInt();
return q;
} catch (InputMismatchException e) {
System.out.println("Please enter a valid integer.");
s.nextLine();
}
}
}
这是一个“无限循环”,当return
语句返回有效值时退出。更好的方法可能只是编写一种输入int
值的方法(以及double
,String
的其他方法):
private int getInteger(String whatToEnter) {
while (true) {
try {
System.out.println("Enter the " + whatToEnter);
int q = s.nextInt();
return q;
} catch (InputMismatchException e) {
System.out.println("Please enter a valid integer.");
s.nextLine();
}
}
}
编辑:抱歉,我忘记输入无效后需要nextLine()
;这会抛出无效的整数和行上的其他所有内容,这样就不会重复导致另一个异常。