Завершение программы при чтении отрицательного числа из файла

1

Я работаю над программой, которая должна читать числа (double) из файла и выполнять некоторые вычисления на них (создание объектов восьмиугольника). Тем не менее, мы должны завершить программу, когда читается отрицательное число, и я не уверен, как это сделать?

Файл, который используется, выглядит следующим образом:

5.0
7.5
3.26
0.0
-1.0

Я использую цикл while для чтения в файле и присваиваю значения переменным, так что мне просто нужно добавить что-то в мой цикл while, если число отрицательно? Что-то вроде:

while(fin.hasNext()) {
    double side = fin.nextDouble();
        if(side < 0) 
            //do whatever I need to do to end the program
 }

Или я совершенно не прав в этом мышлении?

Спасибо заранее за любые данные.

  • 3
    hasNext() возвращает boolean .
  • 0
    какой читатель вы используете?
Показать ещё 6 комментариев
Теги:
file

2 ответа

2
Лучший ответ

Это не совсем так, потому что fin.hasNext() возвращает только, является ли следующая строка EOF (иначе нет текста), а не содержимое. Вам нужно будет проверить отрицательное значение внутри цикла. Это делается путем вызова nextDouble() и сравнения его с 0, а затем разрыва, если он не является положительным. Все это предполагает, что вы используете класс Java Scanner.

Код будет выглядеть следующим образом:

while (fin.hasNextDouble()) {
    double num = fin.nextDouble();

    if (num < 0.0) break;

    // do your stuff
  • 0
    Так что-то вроде: while (fin.hastNext ()) {double side = fin.nextDouble (); Если сторона <0 // делать все, что мне нужно сделать, чтобы закончить программу?
  • 0
    Я бы даже рекомендовал заменить hasNext () hasNextDouble (), но в основном да.
Показать ещё 1 комментарий
2

Это было бы так же просто, как делать

while(fin.nextDouble()) {

    double d = fin.nextDouble();

    if (d < 0) {

        break;
    }

    ...
}

Другим подходом к этому было бы

double d;

while(fin.hasNextDouble() && (d = fin.nextDouble()) >= 0) {

    ...
}
  • 0
    Это может быть сделано только с помощью while и in-line присваивания.
  • 0
    Проблема в том, что вам нужно сохранить прочитанное значение, которое я предполагаю, чтобы вы могли его анализировать, а не просто отбрасывать. Хотя да, вы можете использовать что-то вроде while (fin.hasNext () && (d = fin.nextDouble ())> = 0) {} Я избегаю этого, так как считаю, что его труднее читать, чем подход выше.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню