java - 或管道不工作?

标签 java or-operator

对于我的第一个 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 有效,但首字母小写,就像我使用的 ||因为没有。当我使用它们时,我必须重新启动它,因为我无法输入任何内容,但我显然有或管道说要使用其中任何一个。有谁知道是什么原因造成的?

最佳答案

in.nextLine().equals("Start") || in.nextLine().equals("start")

这将从左到右执行,因此首先执行 in.nextLine().equals("Start")

假设您输入了“start”。左侧返回 false。继续对整个表达式求值。右侧被执行,in.nextLine().equals("start")。因此,它读取另一 行,等待您的另一 输入。这不是您想要的。

要解决此问题(这也是一般规则):不要更改 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"

最后但同样重要的是:这些 || 不称为管道。如果在编程上下文中使用“管道”一词,很多人会想到 Unix pipes , | 命令行中的符号。

在 Java 中 || 是“logical or operator”,“logical or”。用“binary or”来区分,|,区别很大。

关于java - 或管道不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31841887/

相关文章:

java - 查找数字的个位数

java - 异步黑盒编程

c# - 在if语句(C#)中使用“或”运算符的更简单方法

javascript - 多个条件用 OR ||在 'if' 声明 JS

java 更新文本区域

java - 如何在 roboguice 2.0 中注入(inject) LocationManager?

java - 一起使用数据提供程序和 TextNG XML

MySQL 如何在 where 子句的 AND 运算符中使用 and OR?

c - "or"逻辑的switch语句怎么写?

javascript - 为什么我的 if 语句适用于 else if,而不适用于 OR 运算符