在 java 使用 y/n 重启游戏?
Restart game in java using y/n?
如何在 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 是 class 的名称,但它坚持要我创建一个方法让它工作。
当玩家点击 y 时,有人知道更简单的重启游戏的方法吗?
感谢任何帮助
考虑到 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");
}
我怀疑您的原始代码中发生了两件事:
您使用的是 y
和 n
,而不是 "y"
和 "n"
- 前者看起来像编译器的变量名,而后者是字符串文字,我认为我们正在追求它。如果你真的是前者的意思,我们需要将一些名为 y
和 n
的变量声明为字符串,给它们一些值(可能分别是 "y"
和 "n"
),尽管我认为在这种情况下不值得使用变量(因为它们只会在您的代码中被引用一次,没有复杂的表达式,不可变。
如果在比较字符串时简单地使用==,Java实际上会检查字符串是否具有相同的引用(即它们是完全相同的实例,相同的对象)。如果您想检查字符串的内容,我们需要评估 string1.equals(string2)
,如果它们具有相同的内容,则为真,否则为假。更多信息 here.
编辑:好的,问题比我最初想象的要深。考虑像这样而不是上面那样构建你的代码(如果你没有那些开始和结束方法):
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"(实际上是大写或小写),因此它正在处理玩家输入一些乱码的情况。
如何在 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 是 class 的名称,但它坚持要我创建一个方法让它工作。 当玩家点击 y 时,有人知道更简单的重启游戏的方法吗? 感谢任何帮助
考虑到 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");
}
我怀疑您的原始代码中发生了两件事:
您使用的是
y
和n
,而不是"y"
和"n"
- 前者看起来像编译器的变量名,而后者是字符串文字,我认为我们正在追求它。如果你真的是前者的意思,我们需要将一些名为y
和n
的变量声明为字符串,给它们一些值(可能分别是"y"
和"n"
),尽管我认为在这种情况下不值得使用变量(因为它们只会在您的代码中被引用一次,没有复杂的表达式,不可变。如果在比较字符串时简单地使用==,Java实际上会检查字符串是否具有相同的引用(即它们是完全相同的实例,相同的对象)。如果您想检查字符串的内容,我们需要评估
string1.equals(string2)
,如果它们具有相同的内容,则为真,否则为假。更多信息 here.
编辑:好的,问题比我最初想象的要深。考虑像这样而不是上面那样构建你的代码(如果你没有那些开始和结束方法):
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"(实际上是大写或小写),因此它正在处理玩家输入一些乱码的情况。