【问题标题】:loop doesn't break and invalid input always shown循环不会中断并且总是显示无效输入
【发布时间】:2016-04-18 17:11:16
【问题描述】:

我的代码的一部分,您可以在其中玩一个谜题,将一个打乱的 4x4 数字数组重新调整回其原始状态。用户输入某些命令,例如第 0 行第 1 行,一个循环执行命令,打印最新的拼图,然后请求命令,当拼图与拼图的原始状态匹配时应该结束。当回到原始拼图时,我的循环永远不会中断,并且即使输入了正确的输入,也会不断打印无效输入。我该如何解决这些问题? 这只是代码的播放方法部分

static void play(int[][] puzzle) {
        reset(puzzle);
        int[][] z = new int[N][N];
        reset(z);
        print(puzzle);
        for (int i = 0; i < 5; i++) {
           randomRotation(puzzle);

        }

        print(puzzle);


        while (puzzle!=z) {
            System.out.println("enter row x or col x: ");
            Scanner input = new Scanner(System.in);
            String x = input.nextLine();
            if (!x.equals("row 0") || !x.equals("row 1") ||!x.equals( "row 2") ||!x.equals( "row 3") ||!x.equals( "col 0") ||!x.equals( "col 1") ||!x.equals( "col 2") ||!x.equals("col3")) {
                System.out.println("invalid input");
            }



            if (x.equals("row 0")) {
                rotateRow(puzzle, 0);
                print(puzzle);

            }
            if (x.equals("row 1")) {
                rotateRow(puzzle, 1);
                print(puzzle);

            }
            if (x.equals("row 2")) {
                rotateRow(puzzle, 2);
                print(puzzle);

            }
            if (x.equals("row 3")) {
                rotateRow(puzzle, 3);
                print(puzzle);

            }
            if (x.equals("col 0")) {
                rotateColumn(puzzle, 0);
                print(puzzle);

            }
            if (x.equals("col 1")) {
                rotateColumn(puzzle, 1);
                print(puzzle);

            }
            if (x.equals("col 2")) {
                rotateColumn(puzzle, 2);
                print(puzzle);

            }
            if (x.equals("col 3")) {
                rotateColumn(puzzle, 3);
                print(puzzle);
            }


        }

}

【问题讨论】:

  • "row 0" is not "row 1" and "row 1" is not "row 0" 我建议你使用 switch 语句来组合所有这些检查。

标签: java loops input


【解决方案1】:

System.out.println("invalid input"); 之后使用continue

【讨论】:

    【解决方案2】:

    您的布尔值是向后的。说“不是……或者不是……或者不是……”所以除非它是薛定谔的猫并且同时是所有这些值,否则测试总是会成功。

    【讨论】:

      【解决方案3】:

      您的代码存在一些问题和效率低下,但这就是您要问的问题:您的 while 应该是 !puzzle.equals(z) 而不是 puzzle!=z。数组不是原始数组,因此两个不同的数组声明,即使它们的内容相同,在内存上也永远不会相等 (==)。

      此外,您应该将所有ifs 转换为else ifs,并将无效输入作为else 移动到底部。然后else 将纠正您使用 ors 而不是 ands 的问题。

      【讨论】:

      • 无效的输入部分起作用了!但是循环仍然没有中断!还有其他想法吗?虽然欢呼! :) @锆石
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 2022-01-20
      • 2023-01-12
      相关资源
      最近更新 更多