int bestMove(int white, int black) {
int bestmove = -1;      loop:
for (int i = 0 ; i < 9 ; i++) {
    int mw = moves[i];
    if (((white & (1 << mw)) == 0) && ((black & (1 << mw)) == 0)) {
int pw = white | (1 << mw);
if (won[pw]) {
    // white wins, take it!
    return mw;
}
for (int mb = 0 ; mb < 9 ; mb++) {
    if (((pw & (1 << mb)) == 0) && ((black & (1 << mb)) == 0)) {
int pb = black | (1 << mb);
if (won[pb]) {
    // black wins, take another
    continue loop;
}
    }
}
// Neither white nor black can win in one move, this will do.
if (bestmove == -1) {
    bestmove = mw;
}
    }
}
if (bestmove != -1) {
    return bestmove;
} // No move is totally satisfactory, try the first one that is open
for (int i = 0 ; i < 9 ; i++) {
    int mw = moves[i];
    if (((white & (1 << mw)) == 0) && ((black & (1 << mw)) == 0)) {
return mw;
    }
} // No more moves
return -1;
    }小第没有学习过JAVA,近来看了这段代码有点迷惑,就是假如执行到continue loop,这里返回去,这里不是死循环吗?有朋友给我解释一下吗?特别是循环变量i和mb的值的变化

解决方案 »

  1.   

    continue 是跳过这次循环,;意思是这次循环忽略然后再重新下一次循环.
      

  2.   

    continue直接进入下一循环,只是本次循环执行的内容没有执行而已,该退出了自然会退出
      

  3.   

    呵呵,这里的循环和C++有些区别。转换的时候要注意一下了。区别在于i++的执行,java在这里是先执行了continue loop,然后执行了i++,看了一下Thinking in Java次序是先判断条件,执行循环体,在执行步进,在c++里也是一样,不同的是假如在c++里执行continue loop(我在这里用了goto LOOP),但是没有执行i++,所以死循环!
    谢谢楼上同胞的回答!