所以我添加了一个捕获我现在看不到任何错误但是当我运行程序时它重复不正确的输入请再试一次!输入错误请再试一次!输入错误请再试一次!直到我关闭程序。我出错了什么想法?
do {
try {
boolean updown = sc.nextBoolean();
if (updown == true) {
grid[x + 1][y] = 'S';
grid[x + 2][y] = 'S';
grid[x + 3][y] = 'S';
grid[x + 4][y] = 'S';
drawGrid(grid);
} else if (updown == false) {
grid[x][y + 1] = 'S';
grid[x][y + 2] = 'S';
grid[x][y + 3] = 'S';
grid[x][y + 4] = 'S';
drawGrid(grid);
retry = 2;
}
} catch (Exception e) {
System.out.println("Incorrect input please try again!");
}
} while (retry == 1);
答案 0 :(得分:0)
boolean
只有两种可能的状态,只能 为true
或false
;没有第三国。您还可以组合多个分配,只需要else
,drawGrid
可以是 common 。如果您担心无效输入,可以catch InputMismatchException
或检查Scanner
是否有boolean
。或两者。像,
Scanner sc = new Scanner(System.in);
try {
while (!sc.hasNextBoolean()) {
if (!sc.hasNextLine()) {
System.err.println("no input");
System.exit(1);
}
System.err.println("Not a boolean, try again: " + sc.nextLine());
}
boolean updown = sc.nextBoolean();
if (updown) {
grid[x + 1][y] = grid[x + 2][y] = grid[x + 3][y] = grid[x + 4][y] = 'S';
} else {
grid[x][y + 1] = grid[x][y + 2] = grid[x][y + 3] = grid[x][y + 4] = 'S';
}
drawGrid(grid);
} catch (InputMismatchException ime) {
System.err.println("Expected true or false.");
System.err.println(ime.getMessage());
ime.printStackTrace(System.err);
}
答案 1 :(得分:0)
嗯,也有许多麻烦,但你可以这样做:
}
else if (!sc.hasNextBoolean()) { (user needs to get error message
System.out.println("Error , input is not boolean value");
return;
}
if (updown == true) {
grid[x+1][y] = 'S';
grid[x+2][y] = 'S';
grid[x+3][y] = 'S';
grid[x+4][y] = 'S';
drawGrid(grid);
}
答案 2 :(得分:0)
如果我理解你的问题,你想要一种方法来确定用户输入是否是一个有效的布尔值。
Scanner
类有一个内置方法:Scanner#hasNextBoolean()
。在示例代码中,只需调用
sc.hasNextBoolean();
如果返回true
,则用户输入是有效的布尔值(true
或false
)。如果它返回false
,则用户输入是其他内容。