**
这导致在这个gomoku游戏之外做出额外的动作 获胜的举动 额外移动后的checkForWin方法是检测胜利但是的方法 它应该是相应的makeMove之后的checkForWin方法 方法
**
import java.io.File;
boolean hasWinner = false;
File gameFile = new File("src/centralGameFile.txt");
do{
//player 1
makeMove(gameFile);
// check for win
if (checkForWin(gameFile)){
hasWinner = true;
break;
}
// player 2
makeMove(gameFile);
// check for win
if (checkForWin(gameFile)){
hasWinner = true;
break;
}
}while(hasWinner == false);
System.out.println("somebody has won the game");
/*this method is located in another class in the same package and is
called from an instance of the class using the access operator */
protected boolean checkForWin(File f){
//return true if the file has a winner in it using scanner to look for it
//this method works correctly when tested with just a file in a test class
}
//为了简洁省略了try / catch块
/* makeMove(File f) method copies the text from f and over writes
it adding another character; in context this is a gomoku/tic-tac-toe
style game but on a bigger board.
*/
答案 0 :(得分:2)
checkForWin works correctly when tested with just a file in a test class
代码的一部分:
do{
//player 1
makeMove(gameFile);
// check for win
if (checkForWin(gameFile)){
hasWinner = true;
break;
}
// player 2
makeMove(gameFile);
// check for win
if (checkForWin(gameFile)){
hasWinner = true;
break;
}
}while(hasWinner == false);
System.out.println("somebody has won the game");
如果checkForWin
返回true
,则您的方法必须悬挂在makeMove(gameFile)
。这可能会陷入一些无限循环。
答案 1 :(得分:1)
我建议问题的原因是checkForWin
实际上不正在工作。这可能是因为:
checkForWin
调用错误的文件。无论哪种方式,您的问题中都没有足够的信息来说明这里的实际情况。至少我们需要查看checkForWin
方法的代码,可能我们也需要查看更新文件的代码。
虽然我引起了你的注意......你的代码中有一些小错误......但不足以引起你问的问题:
您的hasWinner
标志是多余的,设置和测试它的代码也是如此。你编写循环的方式,你可以在循环之后找到语句的唯一方法是执行两个break
语句中的一个。
这是糟糕的风格......而且有潜在危险(在其他情况下):
... while (hasWinner == false);
应该写成
... while (!hasWinner);
首先,它更具可读性。每个Java程序员都应该知道!
运算符的含义,使用!
是表达这一点的惯用方法。
其次,您的方法容易出错。考虑一下:
... while (hasWinner = false);
您在这里意外地写了=
而不是==
。不幸的是,=
表单是合法的Java ...它意味着与您的意图不同。如果您使用惯用版,则不能犯这个错误。