所以我有一个程序正在读取用户输入的双打,但是,如果用户在开头没有输入任何数据,我想打印一条消息:
输入数据集:
^ 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;
}
我怎么能编写这个程序,以便只有当用户没有输入任何数据时才会打印消息,而不是在用户结束文件时始终打印?谢谢。
答案 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;
}
它没有更多的双令牌通过,因此,条件失败并显示消息。