【问题标题】:How do i implement a play again feature?如何实现再次播放功能?
【发布时间】:2017-02-10 21:06:30
【问题描述】:

我想在游戏结束时收到提示; 如果我想再玩一次。 输入 Y/N:退出游戏或重复游戏。

我该如何以最有效的方式解决这个问题?

编辑:描述资源路径位置类型 方法 playAgain() 未定义 Main Main.java /ScaredyCat/src/se/gruppfisk/scaredycat/main 第 12 行 Java 问题

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();

【问题讨论】:

    标签: java loops methods


    【解决方案1】:

    在你的 main 方法中添加一个循环:

    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");
    }
    

    【讨论】:

    • 谢谢!如果您要使用单独的方法来执行此操作。就像我在编辑后的描述中给出的半途而废的例子。是否可以让 playAgain 方法在某行之后或 System.out.printf("%s is the winner!" 发生时执行?
    • @eximp 是的,你可以这样做。这实际上是个好主意。请参阅我的编辑。我没有测试它,但它应该可以工作。另外,请记得点赞/接受=]
    • 不要像这样离开你Scanner keyboard ;)
    【解决方案2】:

    请注意,流或阅读器应在创建它的同一范围/模块中关闭。在您的情况下,Scanner 不应在 playAgain() 内关闭,因为它是 API 的输入参数。

    可以实现一个循环来检查用户是否想再次播放。通常使用do-while 循环,因为它会在检查条件之前运行一次。使用其他循环将需要一个默认为 true 的变量。

    使用do-while的解决方案:

    boolean playAgain = false;
    do{
      Game game = new Game();
      game.play();      
      playAgain = ScaredyCat.playAgain();
    }while(playAgain);
    

    使用while的解决方案:

    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
    }
    

    您在编辑部分提到的异常意味着playAgain() 方法在您的Main.java 文件中不可用。此外,如果您在main(String[]) 方法中使用此方法,则它必须是static,如果non-static,它必须属于某个对象并且必须由对象引用调用。 nhouser9 建议的方法应该可行。

    【讨论】:

    • 无论我做什么,它都不会在 Main 中工作。如果可能的话,我更喜欢它在 Main 之外。谢谢!
    • @eximp 为什么它在 Main.java 中不起作用。它是一个独立于游戏的功能。
    • Description Resource Path Location Type 方法 playAgain() 未定义 Main Main.java /ScaredyCat/src/se/gruppfisk/scaredycat/main 第 13 行 Java 问题编辑:我的意思是 Main 之外。我的错。第 13 行:playAgain = playAgain();
    • 你想要playAgain()...在Main.java 或其他文件中的哪个位置?两者都可以轻松完成。
    • 我希望它在另一个文件中。吓人的猫
    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    相关资源
    最近更新 更多