Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何实现重播功能?_Java_Loops_Methods - Fatal编程技术网

Java 如何实现重播功能?

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

我想在游戏结束时得到提示; 如果我想再玩一次。 输入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 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()
位置?两者都可以很容易地做到。我想在另一个文件。稻草猫