如何仅从键盘输入整数输入,如果输入无效,我该如何再次询问用户?

时间:2010-04-11 04:31:32

标签: 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 = 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);
}

5 个答案:

答案 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");
}