循环读取用户输入的双打

时间:2016-04-16 06:34:09

标签: java loops

所以我有一个程序正在读取用户输入的双打,但是,如果用户在开头没有输入任何数据,我想打印一条消息:

输入数据集:

^ d

没有数据!

然而,当我运行我的程序并且当用户输入值然后按下ctl + d时,即使输入了值,程序仍然会给出无数据消息。这是我的代码:

public static void main(String[] args) {

    Scanner keyboard = new Scanner(System.in);
    System.out.println("Enter data set: ");
    ArrayList<Double> nums = new ArrayList<Double>();

    while (keyboard.hasNextDouble()) {
        nums.add(keyboard.nextDouble());
    }
    //I think this is the part that is causing the bug but im not sure how to fix it
    if (!keyboard.hasNextDouble()) {
        System.out.println("\nNo Data!");
        return;
    }

我怎么能编写这个程序,以便只有当用户没有输入任何数据时才会打印消息,而不是在用户结束文件时始终打印?谢谢。

4 个答案:

答案 0 :(得分:3)

尝试

 if (nums.isEmpty ()) {

作为你的条件可能吗?

答案 1 :(得分:1)

您需要检查列表中是否存在检查方法List.isEmpty()

的元素

根据java doc:

boolean isEmpty()
  

如果此列表不包含任何元素,则返回true。

实施例

if (nums.isEmpty()) {
        System.out.println("\nNo Data!");
        return;
    }

答案 2 :(得分:1)

public class Test {

    public static void main(String[] args) {

        Scanner keyboard = new Scanner(System.in);
        System.out.println("Enter data set: ");
        ArrayList<Double> nums = new ArrayList<Double>();

    do {
        try {
            double temp = keyboard.nextDouble();
            nums.add(temp);
        } catch (Exception e) {
            //e.printStackTrace();
            break;
        }

    } while (true);

    keyboard.close();

    if (nums.isEmpty()) {
        System.out.println("\nNo Data!");
    }
}
}

$ java Test
Enter data set: 
1.2
2.3
$ java Test
Enter data set: 
^D
No Data!

答案 3 :(得分:1)

要添加@ Jan的答案,最新发生的是代码执行此操作:

while (keyboard.hasNextDouble()) {
        nums.add(keyboard.nextDouble());
 }

它通过扫描仪中的所有标记(即双重),直到没有任何标记为止。之后,当执行到达 if 条件时:

if (!keyboard.hasNextDouble()) {
    System.out.println("\nNo Data!");
    return;
}

它没有更多的双令牌通过,因此,条件失败并显示消息。