如果条件不满足时触发语句

时间:2019-07-05 18:08:46

标签: java

(尝试学习Java的第一天)

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

由于某种原因,不是使用“ 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时,我希望“ U欠我$ 2.1”,但我却得到“ U欠我$ 2.1” ”不是数字假人”

* edit:删除结束}时删除评论

1 个答案:

答案 0 :(得分:0)

需要指出的事物;首先,对于多种情况,最好使用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   阅读换行符后返回。