如何跳出涉及 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。 您正在逐行迭代。所以不要调用 nextDoublenextLine 然后将你的行解析为 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);
            }
        }
    }
}

否则,如果您的文件格式与双重模式匹配(这取决于您的语言环境...),您可能需要将 hasNextDoublenextDouble 一起使用:

进口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;
      }
}