循环不会中断并且始终显示无效输入

时间:2016-04-18 17:11:16

标签: java loops input

我的代码的一部分,你可以玩一个拼图,想要将一个混乱的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);
            }


        }

}

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

你的布尔值是向后的。说&#34;不是......或者不是......或者不是......&#34;因此,除非它是Schroedinger的猫并且同时具备所有这些价值,否则测试将永远成功。

答案 2 :(得分:0)

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

此外,您应将if的所有else if转换为else,并将无效输入移至else的底部。然后tree将更正您使用ors而不是ands的问题。