【问题标题】:If statement triggered when condition not met条件不满足时触发 if 语句
【发布时间】:2019-07-05 18:08:46
【问题描述】:

(尝试学习java的第一天)

我有一个基本代码,它接受用户输入并检查它是整数、双精度还是字符串(按此顺序)。目前,如果输入是整数或字符串,它可以完美地工作,但如果它是双/十进制,也会触发字符串“if”语句的代码。如果我为双精度和整数切换“if”语句的位置,则整数开始触发字符串语句而不是双精度。我尝试将字符串语句放在最顶部,所以它上面没有任何东西,但这只是使得字符串语句覆盖它下面的语句。

出于某种原因,不是对字符串使用“if”语句,而是使用“else”有效(并且同时删除该语句会导致程序按预期运行)但我想了解为什么将来会发生这种情况项目。

import java.util.Scanner;

public class second {
    static Scanner userInput = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.print("Enter a number real quick: ");

        if (userInput.hasNextInt()) {
            int numberEntered = userInput.nextInt();
            System.out.println("U owe me $" + numberEntered);
        }

        if (userInput.hasNextDouble()) {
            double doubleEntered = userInput.nextDouble();
            System.out.println("U owe me $" + doubleEntered);

        }
        if (userInput.hasNextLine()) {
            String stringEntered = userInput.nextLine();
            System.out.println("'" + stringEntered + "'" + " ain't a number dummy");
        }
    }
}

当我输入 2.1 时,我希望“你欠我 2.1 美元”,但我却得到“你欠我 2.1 美元” '' 不是数字假人”

*edit: 删除评论时删除关闭}

【问题讨论】:

  • 您在if(userInput.hasNextInt() 之后缺少一个结束}
  • 使用 else if 条件
  • 这段代码甚至无法编译。它什么也不输出
  • 离题,您有格式问题。这对您来说可能是一个好的开始:google.github.io/styleguide/javaguide.html#s4-formatting。如果您使用 IDE,它应该有一个自动格式化代码的快捷方式。
  • 当你输入2.1时,你也按下了回车,所以现在输入的是2.1<eol>。调用nextInt() 会消耗2.1,留下<eol>,所以当你调用nextLine() 时,你会得到一个空字符串。 --- 相关问题:Scanner is skipping nextLine() after using next() or nextFoo()?

标签: java


【解决方案1】:

需要指出的几件事;首先,在多个条件下使用else if 而不是if 是一个好习惯。我认为在查看或调试它时更干净,因为它与阅读代码的程序员交流,即“else if”语句组是互斥的。

    if (userInput.hasNextInt()) {
        int numberEntered = userInput.nextInt();
        System.out.println("U owe me $" + numberEntered);
    } else if (userInput.hasNextDouble()) {
        double doubleEntered = userInput.nextDouble();
        System.out.println("U owe me $" + doubleEntered);
    } else if (userInput.hasNextLine()) {
        String stringEntered = userInput.nextLine();
        System.out.println("'" + stringEntered + "'" + " ain't a number dummy");
    }

可以很好地满足您想要的预期结果。 使用 Scanner 时请记住:

Scanner.nextInt 方法不会读取您的换行符 通过按“Enter”创建的输入,因此调用 Scanner.nextLine 读取该换行符后返回。

【讨论】:

  • 在这种情况下,else if 是 OP 所缺少的。不过,为了他,请在适当的时候使用它。有时他也想要一个普通的if 而没有'else'