не закрывается scanner [дубликат]

211
13 мая 2018, 22:00

На данный вопрос уже ответили:

  • Как сравнивать строки в Java? 2 ответа

Хочу закрыть свой Scanner, если впишу слово Stop

 Scanner sc = new Scanner (System.in);
    String[] words1 = new String[25] ;
    for (int i = 0; i < 25; i++) {
        if (sc.nextLine().equals("Stop")) {
            System.exit(0); 
        }
        else{
        words1[i]=sc.nextLine();
    }}
    for (int i = 0; i < words1.length; i++) {
        System.out.print(words1[i]+" ");
    }

Но не получается. Ввод данных продолжается, если вписываю Stop. + не выводится массив.

Answer 1

Проблема скорее всего в том, что вы используете == для сравнения слов, а Java по == сравниваются ссылки, используйте sc.nextLine().equals("Stop")

Вот полностью рабочий код

    Scanner sc = new Scanner(System.in);
    String[] words1 = new String[25];
    for (int i = 0; i < 25 && sc.hasNextLine(); i++) {
        String nextLine = sc.nextLine();
        if (nextLine.equalsIgnoreCase("stop")) {
            break;
        }
        words1[i] = nextLine;
    }
    for (String aWords1 : words1) {
        System.out.print(aWords1 + " ");
    }

Первая проблема которая у вас была, это то, что вы делали итерации не смотря на то, что строчки уже закончились. Поправлено добавлением && sc.hasNextLine().

Вторая проблема была в том, что Вы писали так

   if (sc.nextLine().equals("Stop")) {
        System.exit(0); 
    }
    else{
    words1[i]=sc.nextLine();

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

Ну и еще одна проблема была в том, что Вы вызвали System.exit(0), если встретили слово stop, а это завершает выполнение jvm, и Вы никогда бы не дошли до цикла который выводит значения массива

Дополнительно. У Scanner вызывать метод close нельзя когда Вы передаете ему System.in, потому что он закрывает поток который ему передали и таким образом вы можете случайно закрыть System.in, а потом долго искать ошибку

READ ALSO
Как можно рисовать кольца в google maps на android (java)?

Как можно рисовать кольца в google maps на android (java)?

Есть объект GoogleMap, находящийся в MapView и задача рисовать в нем кольца с некоторой прозрачностьюПричем кольца должны быть построены по метрам

246
Как записать текущее местоположение в Telegram bot в базу данных.

Как записать текущее местоположение в Telegram bot в базу данных.

Необходимо реализовать подписку на ежедневный прогноз погодыНе получатся "захватить" параметры для текущего местоположения при команде...

207
как получить значение radiobutton в JSP?

как получить значение radiobutton в JSP?

У меня есть JSP страница, в которой список radioButton заполняется так:

228