Java Else if循环如何停止用户键入除true或false之外的任何内容?
因此,我添加了一个捕获,我现在看不出有任何错误,但当我运行程序时,它会重复错误的输入,请重试!输入错误,请重试!输入错误,请重试!直到我关掉程序。知道我哪里出错了吗Java Else if循环如何停止用户键入除true或false之外的任何内容?,java,arrays,if-statement,Java,Arrays,If Statement,因此,我添加了一个捕获,我现在看不出有任何错误,但当我运行程序时,它会重复错误的输入,请重试!输入错误,请重试!输入错误,请重试!直到我关掉程序。知道我哪里出错了吗 do { try { boolean updown = sc.nextBoolean(); if (updown == true) { grid[x + 1][y] = 'S'; grid[x + 2][y] = 'S'; grid[x + 3][y] = 'S';
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);
boolean
只有两种可能的状态,它只能为true
或false
;没有第三国。您还可以组合多个作业,您只需要一个else
,drawGrid
可以是通用的。如果您担心输入无效,可以捕获输入不匹配异常
,或者检查扫描仪
是否有布尔值
。或者两者兼而有之。像
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);
}
嗯,也有很多麻烦,但你可以这样做:
}
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);
}
如果我正确理解了您的问题,您需要一种方法来确定用户输入是否为有效的布尔值 如何确定用户输入是否为布尔值
Scanner
类有一个内置的方法:Scanner#hasNextBoolean()
。在示例代码中,只需调用
sc.hasNextBoolean();
如果返回
true
,则用户输入是有效的布尔值(true
或false
)。如果它返回false
,则用户输入是其他内容。除了true
或false
之外,updown
(布尔值)怎么可能是其他内容?我很困惑…你的策略有缺陷true
和false
是唯一的布尔值Scanner.nextBoolean()
无法返回任何其他内容。另一方面,您很幸运:如果该方法无法将下一个标记转换为布尔值,那么它将抛出一个输入不匹配异常
,因此您所要做的就是捕获该标记。格式错误的代码。@John Bollinger Hi感谢您的回复,我应该在教程中搜索什么?我以前试过inputmissmatch,因为我认为这是我发布之前的解决方案,但是视频都与我正在做的事情完全脱节。@同步,他是一个初学者,我相信每个人都开始这样做,后来都有所改进,不需要粗鲁的评论,至少他尝试了。:)