或管道坏了吗



对于我的第一个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?");

Start和Begin是有效的,但像我用||表示的那样第一个字母小写是无效的。当我使用这些时,我必须重新启动它,因为我不能键入任何内容,但我显然有或管道说要使用任何一个。有人知道是什么原因造成的吗?

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

这将从左到右执行,因此执行第一个in.nextLine().equals("Start")

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

要解决此问题(这也是一条一般规则(:不要更改if条件下的状态。换句话说:条件下的表达应该没有副作用

您可以将改变状态的方法的结果in.nextLine()分配给一个引用:

String line = in.nextLine();
if (line.equals("Start") || line.equals("start"))

你也可以写这样的条件:

if (line.equalsIgnoreCase("start"))

if (line.toLowerCase().equals("start"))

现在,任何情况下的组合都可以,即使是"START"

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

在Java中,||是">逻辑或运算符"、">logicor"。用">二进制或"|来区分,这是非常不同的。

String str = in.nextLine();
str.equalsIgnoreCase("Start");

它将同时检查小写和大写。您不需要调用equals((方法两次,因此它将优化代码和可读性。

我希望这能解决你的问题。

将扫描仪输入存储在字符串中,如下所示:

 userInput = in.nextLine();

然后在条件语句中评估

相关内容

  • 没有找到相关文章

最新更新