управляемый запросом цикл в Java - PullRequest
0 голосов
/ 14 декабря 2009

как я могу написать управляемый запросом цикл, который будет продолжать вводить значения int от пользователя, добавляя каждое из них к сумме значений, а затем спрашивать, есть ли у пользователя другое значение для ввода, пока пользователь не скажет, что больше нет значения

Ответы [ 5 ]

3 голосов
/ 14 декабря 2009
double sum = 0;
while (user.hasMoreInput()) {
    double += user.mostRecentInput();
}

где вы реализуете hasMoreInput и mostRecentInput по своему усмотрению.

1 голос
/ 14 декабря 2009

Вот как я пишу такой цикл. Я не должен писать твою домашнюю работу для тебя, но я все же хотел бы продемонстрировать свой любимый стиль для такого рода петель.

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while (true) {
    System.out.print("> prompt ");
    String str = in.readLine();
    if (str == null) break;
    process(str);
}

Некоторым людям может не понравиться

  • while (true) - это похоже на бесконечный цикл , потому что это так! Это так же бесконечно, как терпение пользователя при вводе ввода.
  • Однострочный if - некоторые люди предпочли бы сделать это полностью заключенным в скобки 3-строчным. Но я не вижу в этом смысла; в результате он не становится более читабельным.
  • break в середине цикла. Вот для чего break! Это ваш спасательный люк из бесконечных петель.

Если вы привыкли читать код Java, это идиоматично и разборчиво. Преимущества:

  • Показывает шаги, происходящие в той последовательности, в которой они происходят;
  • Ограничивает область действия str точно тем местом, где это необходимо;
  • Это очень ясно о состоянии завершения;
  • Это очень кратко. Я всегда говорю, меньше строк = меньше ошибок.
0 голосов
/ 14 декабря 2009

Вот как я обычно это делаю. как можно меньше кода:).

String s;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while((s = in.readLine()) != null)
    process(s);
0 голосов
/ 14 декабря 2009

Есть несколько частей, с которыми вам нужно справиться. Во-первых, вам нужно знать, как получить информацию от пользователя. Пример альманаха Java Developer (http://www.exampledepot.com/egs/java.io/ReadFromStdIn.html), который я нашел, выглядит следующим образом:

try {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String str = "";
        while (str != null) {
            System.out.print("> prompt ");
            str = in.readLine();
            process(str);
        }
    } catch (IOException e) {
}

Вы можете заменить "> приглашение" на что-то более наглядное. Вы также хотели бы, чтобы у пользователя был лучший способ выйти, чем вводить пустую строку, поэтому, возможно, попросите его ввести «q», если они все сделали. Затем измените сравнение в цикле while на что-то вроде! Str.toLowerCase (). Equals ("q"). Затем вам нужно реализовать функцию процесса, чтобы преобразовать строку в целое число. Integer.parseInt (String) вернет целочисленное значение String, которое правильно представляет целое число (т. Е. «3» или «49», но не «7e»), и в противном случае сгенерирует исключение NumberFormatException. Поскольку вы не хотите, чтобы ваше приложение завершалось с ошибкой при неправильном вводе, я думаю, что процесс может просто вернуть 0 в случае нецелочисленной строки (т. Е. Когда вы перехватываете NumberFormatException).

Наконец, вы захотите инициализировать переменную суммы перед вашим основным циклом, и вы могли бы добавить результат process во время каждой итерации. Затем, когда цикл закончится, вы можете распечатать результат process на экране, используя System.out.println.

Я намеренно пропустил большую часть кода, потому что это звучит как домашнее задание, но если вы сможете понять все это достаточно, чтобы собрать воедино, я думаю, вы научитесь этому достаточно хорошо, чтобы делать это самостоятельно.

0 голосов
/ 14 декабря 2009

Альманах Java Developer *1002* всегда является хорошим источником базовых примеров, таких как ваш.

 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
 String str = "";
 while (str != null) {
     System.out.print("> prompt ");
     str = in.readLine();
     process(str);
 }

Редактировать: Очевидно, некоторые люди думают, что демонстрация основ некоторой техники должна иметь проверку на ошибки. Возможно, я должен был также прокомментировать код и предоставить спецификацию. В следующий раз я также разработаю несколько пользовательских аннотаций для выражения предварительных и последующих условий или проекта реализации в Eiffel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...