Java - для проблем цикла - PullRequest
       1

Java - для проблем цикла

1 голос
/ 24 ноября 2011

У меня есть два класса.И я хочу, чтобы код в цикле for в приведенном ниже классе выполнялся дважды, однако когда я отправил int i = 0 и условие на i < 2, казалось, что оно запускается только один раз.Как вы можете видеть, я должен был установить его на i < 3, чтобы запустить его только дважды.

import java.util.Scanner;

public class LPrint {       
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("sender: ");

        String a = input.next();

        System.out.println("recepiant: ");

        String b = input.next();

        Letter one = new Letter(a, b);

        System.out.println("letter: ");

        for (int i = 0; i < 3; i++) {
            one.body = one.body.concat(input.nextLine() + "\n");
        }

        System.out.print(one.getLetter());
    }
}

В другом классе, String body = "", и он используется только в String result = ("to " + recepiant + ":\n").concat(body + "\n").concat("regards,\n").concat(sender);

1 Ответ

8 голосов
/ 24 ноября 2011

Я думаю, что ваша проблема связана с чтением нежелательной строки, содержащей только новую строку на первой итерации цикла. Я думаю, ваш ввод выглядит примерно так (с пробелом или переводом строки между foo и bar):

foo bar
baz
qux

После первых двух чтений сканер будет расположен сразу после токена bar, но перед новой строкой, следующей сразу за ним. Вызов nextLine будет читать остальную часть первой строки (то есть символа новой строки). Он не читает вторую строку, как вы предполагали. Когда вы читаете три строки, вы получаете следующие строки:

"\n"
"baz\n"
"qux\n"

Чтобы решить эту проблему, вы можете либо использовать readLine вместо read для чтения первых двух токенов, либо вы можете добавить дополнительный вызов к readLine непосредственно перед циклом и отбросить все оставшиеся символы из текущего строка, включая символ новой строки.

См. Этот код на ideone , который более четко демонстрирует проблему.

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