Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Else if循环如何停止用户键入除true或false之外的任何内容?_Java_Arrays_If Statement - Fatal编程技术网

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,因为我认为这是我发布之前的解决方案,但是视频都与我正在做的事情完全脱节。@同步,他是一个初学者,我相信每个人都开始这样做,后来都有所改进,不需要粗鲁的评论,至少他尝试了。:)