【问题标题】:How do I keep asking a user for a valid integer input if there is more than one constraint to the input如果输入有多个约束,我如何继续向用户询问有效的整数输入
【发布时间】:2017-11-08 09:12:09
【问题描述】:

我试图找到一种方法来限制用户可以输入的内容。更具体地说,输入必须遵守我的程序中的某些限制。另外,我想继续要求用户输入有效的输入,只要他没有给出符合限制的整数。我认为我的主要观点是捕获 InputMismatchException (例如,如果用户输入了一个字符串)并在整数输入不在限制范围内时重新请求输入。我对如何使用 try catch 方法感到困惑。任何帮助,将不胜感激!谢谢。

Scanner sc = new Scanner(System.in);
System.out.println("Please enter your next move: ");
int rowNum = sc.nextInt();
int columnNum = sc.nextInt();
try {
    while (((rowNum < 0)||(columnNum < 0)) || ((rowNum >= Board.length)||(columnNum >= Board[0].length))) {
        System.out.println("Your move is not valid, Please enter a valid move");    
        rowNum = sc.nextInt();
        columnNum = sc.nextInt();
    }
    while (Board[rowNum][columnNum] != ' '){
        System.out.println("Your move is not valid, Please enter a valid move");
        rowNum = sc.nextInt();
        columnNum = sc.nextInt();
    }
} catch(Exception e) {
        System.out.println("Your move is not valid, please enter a valid move");
        sc.nextInt();
}

【问题讨论】:

标签: java loops try-catch java.util.scanner


【解决方案1】:

我这样做的方法通常涉及do while loop。我通常会得到这样的结果:

boolean valid = false;
int input = -1;
Scanner in = new Scanner(System.in);
do{
    System.out.println("Please enter a number bigger than 5: ");
    String val = in.nextLine();
    if(val.matches("\\d+"))
        input = Integer.parseInt(val);

    if(input ==(int)input && input > 5)
        valid = true;
}while(!valid);

System.out.print(input + " is greater than 5.");

要检查该值是否为整数,我使用了在此[post] 中找到的代码,并在另一个答案中指出,这不会检查它是否大于可能是问题的 int。

这允许您添加任意多的 if 语句来检查所需的任意多的约束!

【讨论】:

  • oops 有 valid 而不是 !valid... 此后已修复
  • 是的,我明白这一点,但同时我也试图阻止用户提供字符串作为输入......
  • @Alek 我已经更改了代码,它现在检查输入是否包含除数字以外的任何内容
  • @Alek,随时。
【解决方案2】:

您可能不需要为此尝试捕获。当您获得正确形式的输出并退出循环时,您可以执行诸如设置布尔变量之类的操作:

Scanner sc = new Scanner(System.in);
System.out.println("Please enter your next move: ");
int rowNum;
int columnNum;
boolean validInput = false;    
while(!validInput) {
    rowNum = sc.nextInt();
    columnNum = sc.nextInt();
    if(rowNum >= 0 && columnNum >= 0 && rowNum < Board.length && columnNum < Board[0].length && Board[rowNum][columnNum] == ' ') {
        validInput = true;
    }
}

如果您创建一个说明输入是否有效的方法,您还可以实现更简洁的代码,可以是这样的:

boolean validateInput(int rowNum, int columnNum, int rowBound, int columnBound, char c) {
    return rowNum >= 0 && columnNum >= 0 && rowNum < rowBound && columnNum < columnBound && c == ' ';
}

// In the main program
do {
    // get user input
}while(validateInput(...))

【讨论】:

  • OP 希望它首先检查输入是否为字符串。
猜你喜欢
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 2020-05-24
相关资源
最近更新 更多