现在我知道有一个名为“使用java.util.Scanner验证输入”的线程。我已经看过那里,那个帖子只回答了我的一半问题。另一半是当有人输入大于2的数字时,我得到数组索引超出界限异常。我只是需要帮助,如果有人为行或列输入3,控制台应该提示这样的事情:
"Enter the coordinates to place an 'X'. Row then Column."
//enters 3 and 3
"Please enter a valid input"
它会保留并询问用户有效的号码,直到他给出一个。
我需要做一些类似!keyboard.hasNextInt()但是对于整数吗?这将与我的其余代码顺利运行?
答案 0 :(得分:1)
你可以使用do-while循环。像
这样的东西do {
//prompt
//input
} while (input not valid);
prompt
和input
应由代码替换以提示用户并接受输入。在while部分中,检查输入是否有效。
答案 1 :(得分:0)
你的问题不是太清楚,但我会尝试理解它。
我假设您已将您的扫描仪命名为键盘"
在我尝试运行此代码之前,我能看到的第一个问题就是这个(请注意,我在编辑问题之前从代码中抓取了这个问题):
while (board[row][col] != ' ')
{
System.out.println("Already occupied space");
System.out.println("Choose again");
row = keyboard.nextInt();
col = keyboard.nextInt();
}
之前,您确保用户输入整数。但是,在这种情况下,你完全放弃了。
如果用户输入的不是整数,我假设您正在尝试避免错误,这就是我要做的事情:
while(true){
boolean valid = true;
if(!keyboard.hasNextInt()){
valid = false;
keyboard.next();
}
else{
row = keyboard.nextInt();
}
if(!keyboard.hasNextInt()){
valid = false;
keyboard.next();
}
else{
col = keyboard.nextInt();
}
if (valid && (row > 2 || col > 2)){
System.out.println("Please enter a valid input");
continue;
}
else if(!valid){
System.out.println("Please enter a valid input");
continue;
}
else
break;
}
这个代码看起来有点长,有几个原因。首先,我们尝试在之前测试输入是否为整数,我们尝试将其存储为int。其次,我们想要比较输入 之后我们成功存储它以查看它是否小于3.如果输入不是整数,则布尔值为"有效和" #34;将是假的。编译器的工作方式,如果if语句中的有效值为false,它将忽略&&的右边的任何内容,从而避免错误。
我承认,这是使用我以前没学过的一些命令,所以这可能不是最有效的方法。但你明白了这一点:)
P.S。你应该把上面的代码扔进一个方法。