Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2015, 13:28   #1
SteVL
Новичок
Джуниор
 
Регистрация: 29.03.2015
Сообщений: 2
Вопрос [Java] Признак окончания ввода - пустая строка

Выжимка из задания:

"В цикле запрашивать у пользователя фамилию, курс с помощью объекта Scanner. Признаком окончания ввода является пустая строка при вводе фамилии студента. В этом случае ввод прекращается."

Код может показаться бессмысленным, но здесь проблема вот в чем: при 2-ой итерации происходит завершение программы без ожидания ввода фамилии.

Код:
public class Lab {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        String fio;
        int kurs;
      
        while (true) {
            System.out.print("Введите фамилию: ");
            fio = sc.nextLine();
            if (fio.equals("")) {
                break;                
            }
            System.out.print("Введите курс: ");
            kurs = sc.nextInt();
        }
    }
}
Вывод:
Цитата:
Введите фамилию: Фамилия
Введите курс: 1
Введите фамилию: СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 4 секунды)
Попробовал вводить в цикле только строку. Всё нормально.

Код:
public class Lab {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        String fio;
        int kurs;
      
        while (true) {
            System.out.print("Введите фамилию: ");
            fio = sc.nextLine();
            if (fio.equals("")) {
                break;                
            }
        }
    }
}
Вывод:
Цитата:
Введите фамилию: Фамилия
Введите фамилию: Фамилия2
Введите фамилию: Фамилия3
Введите фамилию: /*Здесь был нажат Enter*/
СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 25 секунды)
Прошу подсказать в чём проблема.
SteVL вне форума Ответить с цитированием
Старый 29.03.2015, 13:33   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Когда вы nextInt читаете в буфере остается нетронутый символ конца строки (\n или \r\n), который вы и читаете следующим nextLine.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 31.03.2015, 15:18   #3
SteVL
Новичок
Джуниор
 
Регистрация: 29.03.2015
Сообщений: 2
По умолчанию

Нашел решение.

Первый вариант - не самый лучший:

Создать два сканнера

Код:
public class Lab {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        Scanner sc_fio = new Scanner(System.in);

        String fio;
        int kurs;
      
        while (true) {
            System.out.print("Введите фамилию: ");
            fio = sc_fio.nextLine();
            if (fio.equals("")) {
                break;                
            }
            System.out.print("Введите курс: ");
            kurs = sc.nextInt();
        }
    }
}
Второй вариант - наиболее оптимальный:

Не знаю как объяснить :-)

Код:
public class Lab {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);        

        String fio;
        int kurs;
      
        while (true) {
            System.out.print("Введите фамилию: ");
            fio = sc.nextLine();
            if (fio.equals("")) {
                break;                
            }
            System.out.print("Введите курс: ");
            kurs = sc.nextInt();
            sc.nextLine(); //решение
        }
    }
}
SteVL вне форума Ответить с цитированием
Старый 31.03.2015, 15:38   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Дык и что во втором непонятного? Я ж писал
Цитата:
Когда вы nextInt читаете в буфере остается нетронутый символ конца строки (\n или \r\n)
вот вы их и читаете следующим nextLine
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пустая строка си Praud Помощь студентам 3 21.12.2013 18:08
Пустая строка в Си приправыч Помощь студентам 1 08.12.2012 15:13
Пустая строка при считывании из БД Sam Gold C/C++ Базы данных 3 27.09.2011 10:30
Пустая строка ForzaJuve Общие вопросы C/C++ 3 13.10.2010 15:41
Пока Пустая строка, не считать! Mikhail91 Общие вопросы C/C++ 1 16.02.2010 00:55