Java L oop вопрос о! Scanner.nextLine () в качестве условия - PullRequest
1 голос
/ 13 апреля 2020

В настоящее время я учусь кодировать Java с помощью moo c и выполняю задание, в котором вы принимаете пользовательский ввод (и выполняете какие-то действия с ним). Программа / l oop завершается, если пользователь ничего не вводит и вводит.

Так что это правильный ответ, который я сделал правильно:

while (true) {
    String sentence = scanner.nextLine();
    if (sentence.equals("")) {
        break;
    }
}

Однако до этого я также пробовал что-то вроде:

while (!scanner.nextLine().equals("")) { // ...

Почему этот метод не работает? Я не вижу в этом ничего плохого. (Ниже весь код при необходимости)

import java.util.Scanner;

public class AVClub {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (!scanner.nextLine().equals("")) {
            String sentence = scanner.nextLine();

            String[] array = splitter(sentence);
            for (int i = 0; i < array.length; i++) {
                if (array[i].contains("av")) {
                    System.out.println(array[i]);
                }
            }
        }
    }

    public static String[] splitter(String sentence) {
        String[] array = sentence.split(" ");
        return array;
    }
}

1 Ответ

0 голосов
/ 13 апреля 2020

Попробуйте использовать scanner.hasNext(), чтобы увидеть, есть ли что-то еще, что вы можете прочитать. Вместо вашего метода сплиттера вы можете использовать StringTokenizer, который будет разбивать строку на пробелы.

Причина, по которой вы код не работает, потому что вы вызываете Scanner.nextLine () дважды. Несмотря на то, что ваш код:

while (!scanner.nextLine().equals(""))

является проверкой состояния, он считывает ее и движется дальше. Подумайте об этом так: Сканер похож на читателя книг. Когда вы вызываете Scanner.nextLine (), программа чтения книг перемещается к этой строке и читает ее. Когда вы позвонили снова, он прочитал пустую строку. Например, если я введу это:

first

Ваш читатель прочтет «Мне нравится р ie» и проверит, что это не "". Когда это сделано, и вы получите переменную sentence, вы снова вызвали метод, который читает в СЛЕДУЮЩЕЙ строке, которой там нет. Таким образом, ваш код не работает.

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