【发布时间】:2015-06-13 00:35:12
【问题描述】:
我正在写一段获胜者算法。这个为 Connect 4 赢得了垂直胜利,是的,有很多冗余和坏东西,至少我认为是这样,如果你愿意,让我知道哪些线不好,并提供建议,放置这些请在 cmets 部分。 顺便说一句,标签是否必要?我不知道。我把它扔在那里是因为我认为它可能会有所帮助。
我遇到了运行检查器一部分的 for 循环的问题。所以我决定发表一份印刷声明,看看发生了什么。这是我得到的:
2 /////// 1
3 /////// 2
4 /////// 1
请注意,棋盘上只有三个垂直排列且颜色相同的棋子。可以看到下面的打印语句结构:
public String verticalWin(RoundButton[][] useArray){
//int a = 1;
for(int row = 5; row > 2; row--){
for(int col = 0; col < 7; col++){
if(nextTileExists(row - 1, col) && !useArray[row][col].getBackground().equals(Color.YELLOW))
if(useArray[row][col].getBackground().equals(useArray[row - 1][col].getBackground())){
comeHereLabel:
for(int a = 1; a < 4; a++){//THIS LOOP
if(nextTileExists(row - a, col))
if(useArray[row - a][col].getBackground().equals(useArray[row][col].getBackground())){
pieceWin++;
System.out.println(pieceWin + " /////// " + a);
if(pieceWin == 4)
if(useArray[row][col].getBackground().equals(Color.RED))
return "red";
else
return "black";
}
else
break comeHereLabel;
}
}
}
}
return "A";
}
在方法的顶部,您可以看到我注释掉了int a = 1; 如果我取消注释该行,并转到标记为//THIS LOOP 的循环并将其更改为for(; a < 4; a++) 代码的打印语句和操作彻底改变。我从新印刷中得到的是:
2 /////// 1
3 /////// 2
4 /////// 3
现在棋盘上实际上有 4 个棋子。 是什么导致了这种奇怪现象?
如果您需要更多代码或其他任何内容,请说出来。
【问题讨论】:
-
因为
for (int a = 1;...)循环在另外两个for循环中,所以它会被执行多次。您注释掉的代码顶部附近的int a = 1;将a的值设置为1 仅一次,以便完全执行您的方法。而每次您的内部for循环开始时,for (int a = 1; ...)将a设置为 1。 -
@JohnnyCoder 您的预期行为是什么?
-
编码时,最好不要只在 b/c 中扔你认为可能有帮助的东西。您应该在使用它们之前查看在线文档和示例(有很多)以了解构造的行为方式。
-
@lurker,我做到了,并且觉得它可能会有所帮助,但我实际上并不确定。
-
@CNomad,预期的行为是我在左侧显示的第二个打印语句 2 3 4。