Java 因为if循环不会循环:有没有指向为什么会这样的指针?
这应该循环24次;事实并非如此,我很困惑为什么。请帮我看看外面的各种克诺比: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
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
循环的其余部分求值?如果是,则声明一个单独的布尔值进行切换,然后只在循环后返回该值。