Java Switch语句不会成为默认值

Java Switch语句不会成为默认值,java,switch-statement,Java,Switch Statement,我一直在研究骑士之旅问题的实现,在代码中遇到了一个小问题 我的问题是switch语句。我很困惑,为什么在它经历了所有可能的动作之后,它们都不起作用了,它不会像我想要的那样默认。取而代之的是,它打印出最终的电路板,但不做任何事情就继续运行,因此我不得不取消构建 任何帮助都将不胜感激 我的目标是让它不再显示可能的动作。而不是在它无法移动到其他任何地方的时候永远跑下去 下面是一个输出示例:它在左下角的53处停止 1 0 41 34 3 38 23 36 42 33 2 39

我一直在研究骑士之旅问题的实现,在代码中遇到了一个小问题

我的问题是switch语句。我很困惑,为什么在它经历了所有可能的动作之后,它们都不起作用了,它不会像我想要的那样默认。取而代之的是,它打印出最终的电路板,但不做任何事情就继续运行,因此我不得不取消构建

任何帮助都将不胜感激

我的目标是让它不再显示可能的动作。而不是在它无法移动到其他任何地方的时候永远跑下去

下面是一个输出示例:它在左下角的53处停止

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