0

你如何在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");
    }

game 是类的名称,但它坚持我创建一个方法来工作。有没有人知道当玩家点击 y 时更简单的重启游戏的方法?任何帮助表示赞赏

4

2 回答 2

1

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

  1. 您使用的是yand n,而不是"y"and "n"- 前者在编译器中看起来像变量名,而后者是字符串文字,我认为我们正在使用它。如果您实际上是指前者,我们需要声明一些名为yn作为字符串的变量,给它们一些值(可能"y""n"分别),尽管我不认为在这种情况下使用变量是值得的(因为它们' re 只会在你的代码中被引用一次,没有复杂的表达式,不可变。

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

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

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”(实际上是大写或小写),因此它正在处理玩家输入一些乱码的情况。

于 2015-10-02T18:29:45.217 回答
0

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

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

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

if(playagain.equalsIgnoreCase(y)){
    Game.end();
    Game.start();
}else if(playagain.equalsIgnoreCase(n)){
    System.out.println("Goodbye");
}
于 2015-10-02T18:29:15.807 回答