使用y / n在java中重新启动游戏?

时间:2015-10-02 18:24:01

标签: java restart application-restart alternate

你如何在java中重启游戏?

这是我尝试但不起作用的地方:

String playagain;
    String y="y";
    String n="n";

//这里有大量的代码用于游戏

System.out.println("play another game?(y/n)");
    playagain=input.next();
    if(playagain==y){
        Game.end();
        Game.start();
    }else if(playagain==n){
        System.out.println("Goodbye");
    }

游戏是该类的名称,但它坚持我创建一个方法来实现它。 当玩家点击y时,有人会知道更轻松的方式重启游戏吗? 任何帮助表示赞赏

2 个答案:

答案 0 :(得分:1)

我怀疑原始代码中发生了两件事:

  1. 您正在使用yn,而不是"y""n" - 前者看起来像编译器的变量名称,而后者是字符串文字,我认为我们正在追求。如果您实际上意味着前者,我们需要将一些名为yn的变量声明为字符串,给它们一些值(可能分别为"y""n" ),虽然我不认为在这种情况下使用变量是值得的(假设它们只会在你的代码中引用一次,没有复杂的表达式,不可变。

  2. 如果在比较字符串时只使用==,Java实际上会检查字符串是否具有相同的引用(即它们是完全相同的实例,同一个对象)。如果您想要检查字符串的内容,我们需要评估string1.equals(string2),如果它们具有相同的内容则为true,否则为false。更多信息here

  3. 编辑:好的,问题比我想象的要深。考虑像这样构建代码而不是上面的代码(如果你没有那些开始和结束方法):

    while (true) {
        // Play the game here
        // Play again?
        boolean isPlayingAgain = true;
        while (true) {
            System.out.println("play another game?(y/n)");
            String playingAgainResponse = input.next();
            if (playingAgainResponse.equalsIgnoreCase("y")) {
                break;
            } else if (playingAgainResponse.equalsIgnoreCase("n")) {
                System.out.println("Goodbye");
                isPlayingAgain = false;
                break;
            }
        }
        if (!isPlayingAgain) {
            break;
        }
    }
    

    因此,如果我们的玩家不想再玩,外圈只会终止,否则我们会继续运行代码来玩游戏。该内循环确保玩家输入“y”或“n”(实际上是大写或小写),因此它处理玩家输入一些乱码的情况。

答案 1 :(得分:0)

考虑到playagain是一个字符串,并且您使用input.next();从用户那里获得了输入,那么您应该编辑您的条件:

if(playagain.equalsIgnoreCase("y")){
    Game.end();
    Game.start();
}else if(playagain.equalsIgnoreCase("n")){
    System.out.println("Goodbye");
}

如果n和y是包含String的变量,请执行以下操作

if(playagain.equalsIgnoreCase(y)){
    Game.end();
    Game.start();
}else if(playagain.equalsIgnoreCase(n)){
    System.out.println("Goodbye");
}