对于我的第一个Java项目,我正在尝试制作一个简单的基于文本的游戏.似乎管道或管道不起作用,当我尝试在它不起作用之后输入内容时; 我必须重启它.
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?");
Run Code Online (Sandbox Code Playgroud)
开始和开始工作,但第一个字母小写像我使用|| 因为没有.当我使用那些我必须重新启动它因为我不能输入任何东西,但我显然有或管道说要使用任何一个.有谁知道是什么原因引起的?
Ada*_*zyk 16
in.nextLine().equals("Start") || in.nextLine().equals("start")
Run Code Online (Sandbox Code Playgroud)
这将从左到右执行,因此首先in.nextLine().equals("Start")执行.
让我们说你输入"start".左侧回归false.整个表达的评估仍在继续.右侧执行,in.nextLine().equals("start").所以,它读取另一行,等待你的另一个输入.这不是你想要的.
要解决此问题(这也是一般规则):不要更改if条件中的状态.换句话说:条件中的表达应该没有副作用.
您可以将正在更改状态的方法的结果分配给in.nextLine()引用:
String line = in.nextLine();
if (line.equals("Start") || line.equals("start"))
Run Code Online (Sandbox Code Playgroud)
您还可以编写如下条件:
if (line.equalsIgnoreCase("start"))
Run Code Online (Sandbox Code Playgroud)
要么
if (line.toLowerCase().equals("start"))
Run Code Online (Sandbox Code Playgroud)
现在,任何案件组合都可以,甚至"START".
最后但并非最不重要:这些||不称为管道.如果在编程上下文中使用"管道"一词,很多人会在命令行中考虑Unix管道,|符号.
在Java中||是" 逻辑或运算符"," 逻辑或".要区分" 二进制或" |,这是非常不同的.
String str = in.nextLine();
str.equalsIgnoreCase("Start");
Run Code Online (Sandbox Code Playgroud)
它将检查较低和较高的情况.您不需要两次调用equals()方法,因此它将优化您的代码和可读性.
我希望这能解决你的问题.
| 归档时间: |
|
| 查看次数: |
552 次 |
| 最近记录: |