Ява печатать две строки вместе

1

Я пытаюсь напечатать сообщение на экране, а после этого возьмите значение с клавиатуры. У меня есть 4 печати подряд, но у меня есть методы сканирования между ними. Когда я запускаю свой код, первые две печати работают вместе, и я не могу вставить значение в первую переменную после первой печати.

case 1:
            System.out.println("###Book Data###");
            System.out.print("Name of the book:\t");
            String Name = key.nextLine();

            System.out.print("ISBN of the book:\t");
            String ISBN = key.nextLine();

            System.out.print("Author of the book:\t");
            String author = key.nextLine();

            System.out.print("Copies of the book:\t");
            int copies = key.nextInt();
            book Book = new book(ISBN,Name,author,copies);
            lib.AddBook(Book);
            break;


#########Text Printed######
Please enter your selection:    1
###Book Data###
Name of the book:       ISBN of the book:

Заранее спасибо за вашу помощь!

Теги:
java.util.scanner

2 ответа

2
Лучший ответ

Это связано с тем, что строка над оператором switch имеет key.nextInt() *.

Сканер считывает целое число, но он оставляет символ конца строки '\n' в буфере. Вы должны использовать этот символ '\n' каким-то образом перед key.nextLine(); внутри оператора switch возвращает вам некоторые релевантные данные.

Чтобы устранить эту проблему, вставьте

key.nextLine();

перед оператором switch.

* не спрашивайте меня, как я знаю это :-)

  • 0
    Да, это работает! Можете ли вы объяснить мне, почему это происходит или что искать, чтобы найти решение проблемы?
  • 1
    @Seekerakos Scanner хранит «указатель» на буфер ввода с клавиатуры. Когда пользователи вводят вещи, символы попадают в буфер. Когда вы читаете со сканера, символы удаляются из буфера. Вы просите пользователя войти в пункт меню; он нажимает 1 , затем нажимает [Enter] . Ваш код читает nextInt() со сканера, принимая '1' . [Enter] все еще там. Теперь вы запрашиваете nextLine() внутри оператора case . Scanner видит [Enter] , поэтому сразу возвращает пустую строку!
Показать ещё 3 комментария
2

println создает новую строку, а печать - нет. Вы должны рассмотреть либо использование println, сброс буфера, либо вызов нового символа escape линии "\n"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню