这是我到目前为止所写的内容,但是当引发异常时,它不再要求用户输入。
do {
System.out.println("Enter the number of stones to play with: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String temp = br.readLine();
key = Integer.parseInt(temp);
} while (key < 0 && key > 9);
if (key < 0 || key > 10)
throw new InvalidStartingStonesException(key);
player1 = new KeyBoardPlayer();
player2 = new KeyBoardPlayer();
this.player1 = player1;
this.player2 = player2;
state = new KalaGameState(key);
} catch (NumberFormatException nFE) {
System.out.println("Not an Integer");
} catch (IOException e) {
System.out.println(e);
}
答案 0 :(得分:3)
只要抛出NumberFormatException
,就会跳出循环并向下跳到catch
。如果您的try
- catch
阻止 你的while
循环,那么它将具有您正在寻找的效果。您可能需要在循环上调整条件。
答案 1 :(得分:0)
另一种方法是检查字符串输入是否与整数的正则表达式匹配。如果不匹配,则再次要求输入。
答案 2 :(得分:0)
请参阅Teleteype.readInt()中的Java Project Template。它的基础是您将输入读取为String,然后使用Integer.parseInt()将其转换为整数,如果String的内容不是整数,则会抛出NumberFormatException,您可以通过捕获NumberFormatException来处理。
答案 3 :(得分:0)
我建议的不是使用所有这些例外,而是使用单独的方法来读取特定的数据类型。 (实施例)
import java.util.Scanner;
公共类HelloWorld {
public static void main(String[] args){
int n = getInteger("Enter integer: ");
System.out.println(n);
}
public static boolean isInteger(String s){
if(s.isEmpty())return false;
for (int i = 0; i <s.length();++i){
char c = s.charAt(i);
if(!Character.isDigit(c) && c !='-')
return false;
}
return true;
}
public static int getInteger(String prompt){
Scanner input = new Scanner(System.in);
String in = "";
System.out.println(prompt);
in = input.nextLine();
while(!isInteger(in)){
System.out.println(prompt);
in = input.nextLine();
}
return Integer.parseInt(in);
}
}
答案 4 :(得分:-1)
while (true) {
System.out.println("Enter the number of stones to play with: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
key = Integer.parseInt(br.readLine());
if (key > -1 && key < 10)
break;
else
System.out.println("Invalid number of stones. Choose from 0 - 9");
}