Java Switch语句不会成为默认值
我一直在研究骑士之旅问题的实现,在代码中遇到了一个小问题 我的问题是switch语句。我很困惑,为什么在它经历了所有可能的动作之后,它们都不起作用了,它不会像我想要的那样默认。取而代之的是,它打印出最终的电路板,但不做任何事情就继续运行,因此我不得不取消构建 任何帮助都将不胜感激 我的目标是让它不再显示可能的动作。而不是在它无法移动到其他任何地方的时候永远跑下去 下面是一个输出示例:它在左下角的53处停止Java Switch语句不会成为默认值,java,switch-statement,Java,Switch Statement,我一直在研究骑士之旅问题的实现,在代码中遇到了一个小问题 我的问题是switch语句。我很困惑,为什么在它经历了所有可能的动作之后,它们都不起作用了,它不会像我想要的那样默认。取而代之的是,它打印出最终的电路板,但不做任何事情就继续运行,因此我不得不取消构建 任何帮助都将不胜感激 我的目标是让它不再显示可能的动作。而不是在它无法移动到其他任何地方的时候永远跑下去 下面是一个输出示例:它在左下角的53处停止 1 0 41 34 3 38 23 36 42 33 2 39
1 0 41 34 3 38 23 36
42 33 2 39 44 35 46 21
7 40 43 4 19 22 37 24
32 11 6 0 26 45 20 47
0 8 0 18 5 16 25 0
10 31 12 51 14 27 48 0
53 0 9 30 17 50 15 28
0 0 52 13 0 29 0 49
BUILD STOPPED (total time: 0 seconds)
这是我的开关代码:
public class MoveKnight extends Moves {
public int[][] moveTheKnight() {
Moves switchBetweenMoves = new Moves();
switchBetweenMoves.startingLocation();
while (knight != 64) {
int randomMove = 1 + new Random().nextInt(8);
switch (randomMove) {
case 1:
switchBetweenMoves.firstMoveChoice();
break;
case 2:
switchBetweenMoves.secondMoveChoice();
break;
case 3:
switchBetweenMoves.thirdMoveChoice();
break;
case 4:
switchBetweenMoves.forthMoveChoice();
break;
case 5:
switchBetweenMoves.fifthMoveChoice();
break;
case 6:
switchBetweenMoves.sixthMoveChoice();
break;
case 7:
switchBetweenMoves.seventhMoveChoice();
break;
case 8:
switchBetweenMoves.eighthMoveChoice();
break;
default:
System.out.println("No more possible moves.");
break;
}
}
return board;
}
}
Random.nextInt8生成范围为0-7的值,因为该参数是独占的
你的代码,加上1,永远不会产生大于8的数字
一切都按预期进行。由于int randomMove=1+new Random.nextInt8;…将永远不会执行默认情况 在这里,new Random.nextInt8的输出将始终从0到7,因为8是独占的,因此1+new Random.nextInt8将始终从1到8变化 仅当要匹配的参数与任何情况都不匹配时,才会执行默认情况,在这种情况下,它将传递到默认情况。但是,您已经明确提到了1到8的情况——因此,默认值不会出现在图片中 nextIntint n方法用于获得一致的伪随机序列 分布在0(含0)和指定值之间的int值 排除,从该随机数生成器的序列中提取
Random.nextintn:返回一个伪随机的、均匀分布的int值,该值介于0(包括0)和指定的值(不包括)之间,从该随机数生成器的序列中提取 随机移动变量在1和8之间变化。默认情况下,仅当randomMove<1或randomMove>8时才会执行,这是从不允许的 如果我正确理解您的代码,建议将while条件更改为:
while (knight != 64 && switchBetweenMoves.hasValidMoves())
当且仅当存在有效移动时,hasValidMoves返回true,这些移动都是骑士范围内尚未访问过的移动。在这种情况下,switch语句中的默认情况似乎不是检查完成的正确位置 相反,我将在您的while语句中重点讨论条件。目前,情况如下:
while (knight != 64) {
您还可以使用break语句中断while循环
如果我猜的话,骑士的价值是它已经出现了多少个方块,这就是我如何构建你的while循环
这种情况永远不会发生当randomMove不在1和8之间时,它将变为默认值。我在您的代码中没有看到任何可以阻止这种情况发生的东西。我仍然不清楚这个问题——您是否希望运行默认的in-switch语句?如果问题是这样的,那么就不可能了……取而代之的是,请查看关于的官方教程以及的文档。另请参阅,以了解有关在此处发布之前应执行的操作的更多信息。对此表示抱歉。我并不是故意粗鲁地多次问同一个问题。好吧,所以我仍然需要一种方法,在我的switch语句和while语句变为默认值时打破它。?@ChristopherSpencer除非你更改代码,否则它永远不会运行默认值多少次!没有默认值-没有必要。你会失去的只是println。你对如何解决这个问题有什么建议吗?我如何实现/*你没有更多的动作*/部分?我本想做这样的事,但我不知道怎么做。
while(knight < 64)
{
if(/*you have no more moves*/)
{
System.out.println("No more possible moves.");
break;
}
//logic for moving
}
int randomMove = 1 + new Random().nextInt(8);