或管道不工作?
Are the or pipes not working?
对于我的第一个 Java 项目,我正在尝试制作一个简单的基于文本的游戏。似乎 or 管道不起作用,当我尝试在它不起作用后输入某些内容时;我必须重新启动它。
public void GameStart() {
String playerName = "Player";
String Command = "Choice";
System.out.println("Type Start to start game!");
if(in.nextLine().equals("Start") || in.nextLine().equals("start")) {
Help();
print("Type Begin to start game :D");
if(in.nextLine().equals("Begin") || in.nextLine().equals("begin")) {
System.out.println("Who are you?");
Start 和 Begin 有效,但第一个字母小写就像我使用的一样 ||因为没有。当我使用它们时,我必须重新启动它,因为我无法输入任何内容,但我显然有或管道说要使用其中任何一个。有谁知道是什么原因造成的?
像这样将扫描仪输入存储在字符串中:
userInput = in.nextLine();
然后在你的条件语句中求值
in.nextLine().equals("Start") || in.nextLine().equals("start")
这会从左到右执行,所以先执行in.nextLine().equals("Start")
。
假设您输入 "start"
。左侧 returns false
。继续对整个表达式求值。右侧被执行,in.nextLine().equals("start")
。因此,它读取 another 行,等待您的 another 输入。这不是你想要的。
要解决此问题(这也是一般规则):不要更改 if
条件 中的状态。也就是说:条件中的表达式应该没有side effects.
您可以将正在更改状态的方法的结果 in.nextLine()
分配给参考:
String line = in.nextLine();
if (line.equals("Start") || line.equals("start"))
你也可以这样写条件:
if (line.equalsIgnoreCase("start"))
或
if (line.toLowerCase().equals("start"))
现在,任何大小写组合都可以,甚至 "START"
。
最后但同样重要的是:这些 ||
不称为管道。如果在编程上下文中使用单词"pipe",很多人会想到命令行中的Unix pipes、|
符号。
在Java中||
是“逻辑或运算符”,“逻辑或”。用“binary or”来区分,|
,区别很大。
String str = in.nextLine();
str.equalsIgnoreCase("Start");
它将检查小写和大写。您不需要两次调用 equals() 方法,因此它将优化您的代码和可读性。
希望这能解决您的问题。
对于我的第一个 Java 项目,我正在尝试制作一个简单的基于文本的游戏。似乎 or 管道不起作用,当我尝试在它不起作用后输入某些内容时;我必须重新启动它。
public void GameStart() {
String playerName = "Player";
String Command = "Choice";
System.out.println("Type Start to start game!");
if(in.nextLine().equals("Start") || in.nextLine().equals("start")) {
Help();
print("Type Begin to start game :D");
if(in.nextLine().equals("Begin") || in.nextLine().equals("begin")) {
System.out.println("Who are you?");
Start 和 Begin 有效,但第一个字母小写就像我使用的一样 ||因为没有。当我使用它们时,我必须重新启动它,因为我无法输入任何内容,但我显然有或管道说要使用其中任何一个。有谁知道是什么原因造成的?
像这样将扫描仪输入存储在字符串中:
userInput = in.nextLine();
然后在你的条件语句中求值
in.nextLine().equals("Start") || in.nextLine().equals("start")
这会从左到右执行,所以先执行in.nextLine().equals("Start")
。
假设您输入 "start"
。左侧 returns false
。继续对整个表达式求值。右侧被执行,in.nextLine().equals("start")
。因此,它读取 another 行,等待您的 another 输入。这不是你想要的。
要解决此问题(这也是一般规则):不要更改 if
条件 中的状态。也就是说:条件中的表达式应该没有side effects.
您可以将正在更改状态的方法的结果 in.nextLine()
分配给参考:
String line = in.nextLine();
if (line.equals("Start") || line.equals("start"))
你也可以这样写条件:
if (line.equalsIgnoreCase("start"))
或
if (line.toLowerCase().equals("start"))
现在,任何大小写组合都可以,甚至 "START"
。
最后但同样重要的是:这些 ||
不称为管道。如果在编程上下文中使用单词"pipe",很多人会想到命令行中的Unix pipes、|
符号。
在Java中||
是“逻辑或运算符”,“逻辑或”。用“binary or”来区分,|
,区别很大。
String str = in.nextLine();
str.equalsIgnoreCase("Start");
它将检查小写和大写。您不需要两次调用 equals() 方法,因此它将优化您的代码和可读性。
希望这能解决您的问题。