我有一组双精度值,可以通过调用属于Customer类的方法getArrivalTime()
来检索它们。当我运行此while循环时,由于无法退出循环,因此无法打印输出。
while (sc.hasNextLine()) {
Customer customer = new Customer(sc.nextDouble());
String timeToString = String.valueOf(customer.getArrivalTime());
if (!(timeToString.isEmpty())) {
c.add(customer);
} else {
break;
}
}
例如
输入:
0.500
0.600
0.700
我已经在循环末尾添加了break;
。还有什么可以做的?
答案 0 :(得分:2)
如果您将输入读取为字符串,然后将其解析为双精度字,则可以在空白行处使循环中断。
while (sc.hasNextLine()) {
String line = sc.nextLine();
if (line.isEmpty()) {
break;
}
c.add(new Customer(Double.parseDouble(line)));
}
或者,您可以在现有代码中使用hasNextDouble()
代替hasNextLine()
。混合使用hasNextLine()
和nextDouble()
是错误的。
答案 1 :(得分:0)
我猜您正在使用Scanner
。
您正在逐行进行迭代。因此,请不要调用nextDouble
,而要nextLine
然后将您的行解析为Double。
这是简化版:
import java.util.Scanner;
public class Snippet {
public static void main(String[] args) {
try (Scanner sc = new Scanner("0.500\r\n" + "0.600\r\n" + "0.700");) {
while (sc.hasNextLine()) {
String line = sc.nextLine();
double customer = Double.parseDouble(line);
System.out.println(customer);
}
}
}
}
否则,如果文件格式与双精度模式匹配(取决于您的语言环境...),则可能需要将hasNextDouble
与nextDouble
结合使用:
导入java.util.Scanner;
公共课程摘录{ 公共静态void main(String [] args){
try (Scanner sc = new Scanner("0,500\r\n" + "0,600\r\n" + "0,700");) {
while (sc.hasNextDouble()) {
double customer = sc.nextDouble();
System.out.println(customer);
}
}
}
}
HTH!
答案 2 :(得分:0)
如果您不想像使用goto
这样的操作,则可以随时向您boolean
添加一个while
标志条件。
boolean flag = true;
while (sc.hasNextLine() && flag) {
Customer customer = new Customer(sc.nextDouble());
String timeToString = String.valueOf(customer.getArrivalTime());
if (!(timeToString.isEmpty())) {
c.add(customer);
} else {
flag = false;
}
}