Я выполняю задание для класса. По какой-то причине программа полностью пропускает часть, в которой name
переменной должно быть введено пользователем. Я не могу думать о какой-либо причине, почему он ведет себя таким образом, так как остальная часть моего кода, которая находится после части cardType
(которая запрашивает такие вещи, как String
и типы int
работает нормально и в порядке.
System.out.println("Enter the card information for wallet #" +
(n+1) + ":\n---\n");
System.out.println("Enter your name:");
String name = scan.nextLine();
name = capitalOf(name);
System.out.println("Enter card type");
String cardType = scan.nextLine();
cardType = capitalOf(cardType);
Это ведет себя так, потому что я уверен, что вы использовали один и тот же объект сканера для сканирования целых/двойных значений, прежде чем использовать его для сканирования имени.
Сказав это, это не значит, что вам нужно создать несколько объектов сканера. (Вы никогда не должны этого делать).
Один простой способ справиться с этой проблемой - сканирование строк, даже если вы ожидаете целые числа/парные и отбрасываете их обратно.
Scanner scn = new Scanner(System.in);
int numbers = scn.nextInt(); //If you do this, and it skips the next input
scn.nextLine(); //do this to prevent skipping
//I prefer this way
int numbers = Integer.toString(scn.nextLine());
String str = scn.nextLine(); //No more problems
Вероятно, вам нужно будет уничтожить конец последней прочитанной строки, прежде чем пытаться получить имя пользователя:
scan.nextLine(); // add this
System.out.println("Enter the card information for wallet #" +
(n+1) + ":\n---\n");
System.out.println("Enter your name:");
String name = scan.nextLine();
name = capitalOf(name);
System.out.println("Enter card type");
String cardType = scan.nextLine();
cardType = capitalOf(cardType);
nextInt()
илиnextDouble()
, вызовитеnextLine()
(и игнорируйте его содержимое) перед вашим следующим вызовомnextLine()
.