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
——而且,这是(我怀疑)一个家庭作业问题,让我们或许更喜欢好的提示而不是明确地写出解决方案。