Как вырваться из цикла while, который включает hasNextLine ()? - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть набор двойных значений, и их можно получить, вызвав метод getArrivalTime(), который принадлежит классу Customer.Когда я выполняю этот цикл 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; в конце цикла.Что еще можно сделать?

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Вы можете сделать этот разрыв из цикла на пустой строке, если вы читаете ввод как строки, а затем анализируете их в двойные числа.

while (sc.hasNextLine()) {
    String line = sc.nextLine();
    if (line.isEmpty()) {
        break;
    }
    c.add(new Customer(Double.parseDouble(line)));
}

В качестве альтернативы вы можете использовать hasNextDouble() вместо hasNextLine()в вашем существующем коде.Смешивать hasNextLine() и nextDouble().

- ошибка
0 голосов
/ 26 февраля 2019

Если вы не хотите использовать goto подобные операции, вы всегда можете добавить к вам условие boolean flag 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;
      }
}
0 голосов
/ 26 февраля 2019

Полагаю, вы используете 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:

import java.util.Scanner;

открытый класс Snippet {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!

...