如何跳出涉及 hasNextLine() 的 while 循环?
How to break out of while loop that involves hasNextLine()?
我有一组双精度值,可以通过调用属于客户 class 的方法 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;
。还能做什么?
我猜你用的是 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;
public class 片段 {
public static 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!
如果您将输入读取为字符串,然后将它们解析为双精度值,则可以在空白行上从循环中中断。
while (sc.hasNextLine()) {
String line = sc.nextLine();
if (line.isEmpty()) {
break;
}
c.add(new Customer(Double.parseDouble(line)));
}
或者,您可以在现有代码中使用 hasNextDouble()
而不是 hasNextLine()
。混用 hasNextLine()
和 nextDouble()
是错误的。
如果您不想使用 goto
之类的操作,您可以随时向 while
.
添加一个 boolean
标志条件
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;
}
}
我有一组双精度值,可以通过调用属于客户 class 的方法 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;
。还能做什么?
我猜你用的是 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;
public class 片段 { public static 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!
如果您将输入读取为字符串,然后将它们解析为双精度值,则可以在空白行上从循环中中断。
while (sc.hasNextLine()) {
String line = sc.nextLine();
if (line.isEmpty()) {
break;
}
c.add(new Customer(Double.parseDouble(line)));
}
或者,您可以在现有代码中使用 hasNextDouble()
而不是 hasNextLine()
。混用 hasNextLine()
和 nextDouble()
是错误的。
如果您不想使用 goto
之类的操作,您可以随时向 while
.
boolean
标志条件
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;
}
}