Java 因为if循环不会循环:有没有指向为什么会这样的指针?

Java 因为if循环不会循环:有没有指向为什么会这样的指针?,java,Java,这应该循环24次;事实并非如此,我很困惑为什么。请帮我看看外面的各种克诺比: private boolean simpleMove(Board bd) { int b = rn.nextInt(3); for (int i = 0; i < 24; i++) { if (bd.isVacant(i) && rul.isLegalMove(tigerLocs[b], i)) { bd.swap(tiger

这应该循环24次;事实并非如此,我很困惑为什么。请帮我看看外面的各种克诺比:

private boolean simpleMove(Board bd)
{        
    int b = rn.nextInt(3);
    for (int i = 0; i < 24; i++) {
        if (bd.isVacant(i) && rul.isLegalMove(tigerLocs[b], i)) {
            bd.swap(tigerLocs[b],i);
            bd.setTiger(i);
            tigerLocs[b] = i;
            System.out.println(i);
            return true;
        }
        else {
            System.out.println(i);        
        }
    }

    System.out.println("invalid");
    return false;
private boolean simpleMove(单板bd)
{        
int b=rn.nextInt(3);
对于(int i=0;i<24;i++){
如果(bd.IsSpank(i)和rul.isLegalMove(tigerLocs[b],i)){
bd.swap(tigerLocs[b],i);
bd.setTiger(i);
tigerLocs[b]=i;
系统输出打印LN(i);
返回true;
}
否则{
系统输出打印LN(i);
}
}
System.out.println(“无效”);
返回false;

正如注释所指出的,您的循环最多将执行24次。 但是if语句中的return语句可能会导致它返回'early'

看起来像是一种棋盘游戏。 董事会似乎有24个“正方形”,它进行了第一次合法移动并返回真值。 如果找不到合法的移动,则返回false

我无法确认总体逻辑,但这一理由似乎是合理的:

如果有可用的移动,则接受它并返回
true

如果没有移动可用,则不移动并返回
false

,如果您希望它继续,即使在找到“有效”移动之后,也可以只存储已找到有效移动的事实。这可以在单独的布尔变量中完成:

private boolean simpleMove(Board bd) {  
    int b = rn.nextInt(3);
    boolean valid = false; // until proven otherwise below
    for (int i = 0; i < 24; i++) {
        if (bd.isVacant(i) && rul.isLegalMove(tigerLocs[b], i)) {
            bd.swap(tigerLocs[b],i);
            bd.setTiger(i);
            tigerLocs[b] = i;   
            valid = true;
        }
        System.out.println(i); // why output HERE when we have a return value?
    }
    if (!valid) {
        System.out.println("invalid"); // why output HERE when we have a return value?
    }
    return valid;
}
private boolean simpleMove(Board bd){
int b=rn.nextInt(3);
boolean valid=false;//除非下面另有证明
对于(int i=0;i<24;i++){
如果(bd.IsSpank(i)和rul.isLegalMove(tigerLocs[b],i)){
bd.swap(tigerLocs[b],i);
bd.setTiger(i);
tigerLocs[b]=i;
有效=真;
}
System.out.println(i);//当我们有一个返回值时,为什么在这里输出?
}
如果(!有效){
System.out.println(“无效”);//当我们有一个返回值时,为什么在这里输出?
}
返回有效;
}

目前尚不清楚是否能找到多个“有效”移动,以及在“交换”时是否会出现问题或者没有。如果只有一个可能的移动,那么就不需要继续使用
for
循环进行迭代;只需像您刚才那样在体内执行
return

它最多运行24次,但是您添加了一个return语句,可以在从方法返回的语句之前到达该语句。嘿,这是r吗eturn true还是false?我认为必须在if语句的主体中返回true。在找到“有效”移动后,它是否应该继续对
for
循环的其余部分求值?如果是,则声明一个单独的布尔值进行切换,然后只在循环后返回该值。