Методы hasNext() и Next()

Задача:

На вход подаётся последовательность слов. Посчитайте общее количество введённых слов. Примечание. Так как маркер конца последовательности в этой задаче отсутствует, будет удобно воспользоваться методом hasNext()."

Моё решение:

import java.util.Scanner;

class MyStudy {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = 0; //счетчик слов
        while (sc.hasNext()) {
            a++;
        }
        System.out.println(a);
    }
}

В гугле гуглил=) Не могу понять, как остановить hasNext()? Получается бесконечный цикл.


Ответы (3 шт):

Автор решения: Алексей Шиманский

Пишу в IntelliJ IDEA, не выдает счетчик слов.

Проблема тут не столько в hasNext (хотя, чтобы hasNext работал, нужна ещё ему в пару sc.next(), sc.nextLine() и подобный метод, который будет считывать данные), сколько в том, где происходит исполнение программы.

System.in - используется для работы с консолью, для получения ввода с консоли.

В IDEA, понятно, консоли нет (во всяком случае в intellij idea я не припомню). Поэтому он и не может ничего считать. Если на вход в IDEA подать строку new Scanner("123 4 555"); то будет работать и в самой IDE

→ Ссылка
Автор решения: Alfakaban

Тебе нужно считать 1 строку из консольного буфера и закрыть его. Для удобного использования методов сканера передай считанную строку в новый сканер и дальше используй его

Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
scanner.close();
Scanner scanner1 = new Scanner(line);
String codeMessage = "";
String result = "";
while (scanner1.hasNext()){}
→ Ссылка
Автор решения: Norman
public static void main(String[] args) {
        //Передаем в обьект класса Scanner строку "..."
        Scanner sc=new Scanner("и цикл выполняется. А если ничего не ввели, то"); 
        int a = 0;
        while (sc.hasNext()){    //Пока есть что считывать
            String c=sc.next();  // с  присвоить слово
            a++;                 // счетчик
        }
        System.out.println(a);   //вывод счетчика в консоль
    }
→ Ссылка