Java 如何实现重播功能?
我想在游戏结束时得到提示; 如果我想再玩一次。 输入Y/N:退出游戏或重复游戏 我如何以最有效的方式进行这项工作 编辑:描述资源路径位置类型 对于Main.java/ScaredyCat/src/se/grupfisk/ScaredyCat/Main line 12 java问题类型,未定义playReach()方法Java 如何实现重播功能?,java,loops,methods,Java,Loops,Methods,我想在游戏结束时得到提示; 如果我想再玩一次。 输入Y/N:退出游戏或重复游戏 我如何以最有效的方式进行这项工作 编辑:描述资源路径位置类型 对于Main.java/ScaredyCat/src/se/grupfisk/ScaredyCat/Main line 12 java问题类型,未定义playReach()方法 public boolean playAgain(Scanner keyboard) { try { System.out.print("Do you wa
public boolean playAgain(Scanner keyboard) {
try {
System.out.print("Do you want to play again? (Y/N): ");
String reply = keyboard.nextLine();
return reply.equalsIgnoreCase("Y");
} finally {
keyboard.close();
将循环添加到主方法:
public static void main(String[] args) {
do {
ScaredyCat game = new ScaredyCat(new Player("Urkel",23),new Player("Steve", 18));
game.play();
} while(playAgain());
}
private static boolean playAgain() {
Scanner keyboard = new Scanner(System.in);
System.out.print("Play again? (Y/N): ");
String replay = keyboard.nextLine();
return replay.equals("Y");
}
请注意,流或读卡器应在同一作用域/模块中关闭,它是在中创建的。在您的情况下,
Scanner
不应在playreach()
内关闭,因为它是API的输入参数
可以实现一个循环来检查用户是否想要再次播放。通常使用do while
循环,因为它将在检查条件之前运行一次。使用其他循环将需要一个默认为true
的变量
解决方案使用do while
:
boolean playAgain = false;
do{
Game game = new Game();
game.play();
playAgain = ScaredyCat.playAgain();
}while(playAgain);
boolean playAgain = true;
while(playAgain){
Game game = new Game();
game.play();
playAgain = ScaredyCat.playAgain();
}
使用解决方案,而:
boolean playAgain = false;
do{
Game game = new Game();
game.play();
playAgain = ScaredyCat.playAgain();
}while(playAgain);
boolean playAgain = true;
while(playAgain){
Game game = new Game();
game.play();
playAgain = ScaredyCat.playAgain();
}
在ScaredyCat.java中添加以下内容
public static boolean playAgain() {
Scanner keyboard = new Scanner(System.in);
System.out.print("Play again? (Y/N): ");
String replay = keyboard.nextLine();
return replay.equals("Y"); //or equalsIgnoreCase
}
您在编辑部分提到的异常意味着
playreach()
方法在Main.java
文件中不可用。此外,如果从main(String[])
方法中使用此方法,则它必须是静态的
,如果是非静态的
,则它必须属于某个对象,并且必须由对象引用调用。建议的方法应该有效。谢谢!如果你用另一种方法来做的话。就像我在编辑的描述中给出的半途而废的例子一样。是否有可能使playreach方法在某一行之后执行,或者在System.out.printf(“%s是赢家!”发生?@eximp是的,你可以这样做。这实际上是个好主意。请看我的编辑。我没有测试它,但它应该可以工作。另外,请记住向上投票/接受=]不要像这样离开你扫描仪键盘))无论我做什么,它基本上都不会工作。如果可能的话,我更喜欢在主干道外面。谢谢@eximp为什么不能在Main.java中工作。它是一个独立于游戏的功能。描述资源路径位置类型方法playreach()对于Main类型是未定义的。java/ScaredyCat/src/se/gruppfisk/ScaredyCat/Main line 13 java问题编辑:我的意思是在Main之外。我的错。第13行:再次播放=再次播放();您想在Main.java
或其他文件中的playreach()
位置?两者都可以很容易地做到。我想在另一个文件。稻草猫