【问题标题】:Else if Loops how to stop the user typing anything but true or false?Else if Loops 如何阻止用户输入除真假以外的任何内容?
【发布时间】:2018-05-05 13:53:14
【问题描述】:

所以我添加了一个catch,我现在看不到任何错误,但是当我运行程序时它重复输入不正确,请再试一次!输入错误请重试!输入错误请重试!直到我关闭程序。有什么想法哪里出错了吗?

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);

【问题讨论】:

  • 除了 truefalse 之外,updown(布尔值)怎么能是任何东西?我很困惑...
  • 你的策略有缺陷。 truefalseonly boolean 值。 Scanner.nextBoolean() 不能返回任何其他内容。另一方面,你很幸运:如果该方法无法将下一个标记转换为boolean,它将抛出一个InputMismatchException,所以你所要做的就是抓住它。
  • 代码格式错误。
  • @John Bollinger 嗨,感谢您的回复,我应该在教程上搜索什么?我之前尝试过 inputmissmatch,因为我认为这是我发布之前的解决方案,但是这些视频对于我正在做的事情来说都非常脱离背景。
  • @Synch 他是一个初学者,我相信每个人都开始这样做,后来它有所改善,不需要粗鲁的 cmets ,至少他尝试过。 :)

标签: java arrays if-statement


【解决方案1】:

一个boolean只有两种可能的状态,它可以只有truefalse;没有第三种状态。您也可以组合多个作业,您只需要一个elsedrawGrid 即可通用。如果您担心输入无效,可以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);
}

【讨论】:

    【解决方案2】:

    嗯,也有很多麻烦,但你可以这样做:

    }
            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);
                }
    

    【讨论】:

      【解决方案3】:

      如果我正确理解您的问题,您需要一种方法来确定用户输入是否为有效的布尔值。

      如何判断用户输入是否为布尔值

      Scanner 类有一个内置方法:Scanner#hasNextBoolean()。在您的示例代码中,只需调用

      sc.hasNextBoolean();
      

      如果它返回true,则用户输入是一个有效的布尔值(truefalse)。如果它返回false,则用户输入是别的东西。

      【讨论】:

        猜你喜欢
        • 2015-05-03
        • 1970-01-01
        • 1970-01-01
        • 2016-03-01
        • 2017-06-25
        • 2021-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多