Я пытаюсь напечатать сообщение на экране, а после этого возьмите значение с клавиатуры. У меня есть 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:
Заранее спасибо за вашу помощь!
Это связано с тем, что строка над оператором switch
имеет key.nextInt()
*.
Сканер считывает целое число, но он оставляет символ конца строки '\n'
в буфере. Вы должны использовать этот символ '\n'
каким-то образом перед key.nextLine();
внутри оператора switch возвращает вам некоторые релевантные данные.
Чтобы устранить эту проблему, вставьте
key.nextLine();
перед оператором switch
.
* не спрашивайте меня, как я знаю это :-)
println создает новую строку, а печать - нет. Вы должны рассмотреть либо использование println, сброс буфера, либо вызов нового символа escape линии "\n"
Scanner
хранит «указатель» на буфер ввода с клавиатуры. Когда пользователи вводят вещи, символы попадают в буфер. Когда вы читаете со сканера, символы удаляются из буфера. Вы просите пользователя войти в пункт меню; он нажимает1
, затем нажимает[Enter]
. Ваш код читаетnextInt()
со сканера, принимая'1'
.[Enter]
все еще там. Теперь вы запрашиваетеnextLine()
внутри оператораcase
.Scanner
видит[Enter]
, поэтому сразу возвращает пустую строку!