Java 如何从键盘上只获取整数输入?如果输入无效,如何再次询问用户?
这是我到目前为止所写的,但当引发异常时,它不会再次要求用户输入Java 如何从键盘上只获取整数输入?如果输入无效,如何再次询问用户?,java,validation,Java,Validation,这是我到目前为止所写的,但当引发异常时,它不会再次要求用户输入 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 = I
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);
}
do{
System.out.println(“输入要玩的石头数量:”);
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
字符串温度=br.readLine();
key=Integer.parseInt(temp);
}while(键<0&&key>9);
如果(键<0 | |键>10)
抛出新的InvalidStartingstoneException(键);
player1=新键盘播放器();
player2=新键盘播放器();
this.player1=player1;
this.player2=player2;
状态=新的卡拉加斯酸盐(键);
}捕获(NumberFormatException nFE){
System.out.println(“非整数”);
}捕获(IOE异常){
系统输出打印ln(e);
}
一旦抛出NumberFormatException
,您就跳出循环,跳转到捕获
。如果您的try
-catch
块在循环中,它将具有您想要的效果。您可能需要调整循环的条件。while(true){
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");
}
System.out.println(“输入要玩的石头数量:”);
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
key=Integer.parseInt(br.readLine());
如果(键>-1和键<10)
打破
其他的
System.out.println(“无效的石头数,从0-9中选择”);
}
另一种方法是检查字符串输入是否与整数的正则表达式匹配。如果不匹配,则再次请求输入。请参阅。它的基本原理是将输入读取为字符串,然后使用将其转换为整数,如果字符串的内容不是整数,则会抛出,您可以通过捕获NumberFormatException来处理它。我建议不要使用所有这些异常,而是创建读取特定数据类型的单独方法。(例)
导入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);
}
publicstaticvoidmain(字符串[]args){
int n=getInteger(“输入整数:”);
系统输出println(n);
}
公共静态布尔isInteger(字符串s){
如果(s.isEmpty())返回false;
对于(int i=0;i),代码确实没有这样做。您以前在另一个帐户上问过类似的问题:请注册您的帐户并坚持使用同一个帐户:不处理NumberFormatException
——而且,这是(我怀疑)一个家庭作业问题,让我们或许更喜欢好的提示而不是明确地写出解决方案。