我试图找到一种方法来对用户可以输入的内容给出一些限制。更具体地说,输入必须遵守我的程序中的某些限制。另外,我想继续要求用户输入有效的输入,只要他没有给出符合限制的整数。我认为我的主要观点是捕获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();
}
答案 0 :(得分:0)
我这样做的方法通常涉及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语句,以便根据需要检查多少约束!
答案 1 :(得分:0)
你可能不需要试一试。当你得到正确的输出形式并离开循环时,你可以做一些事情,比如设置一个布尔变量:
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(...))