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