2015-01-23 3 views
1

Я выполняю задание для класса. По какой-то причине программа полностью пропускает ту часть, где должна быть введена переменная 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); 
+0

Вы пробовали выполнить свой код в своем отладчике? Если да, что вы видите? –

+1

Если у вас есть вызов 'nextInt()' или 'nextDouble()' в вашем коде, вызовите 'nextLine()' (и проигнорируйте содержимое) перед следующим вызовом 'nextLine()'. – TheLostMind

+0

Как сканер используется перед этой строкой? –

ответ

1

вы, вероятно, нужно потреблять конец последней строки вы читали до пытаюсь получить имя пользователя:

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); 
+0

Спасибо! Время до этого было «scan.nextInt();», и ожидалось ли значение «int»? – user2603506

+0

@ user2603506 Конец строки ввода, содержащий int, читаемый nextInt(), был возвращен следующим вызовом nextLine(). Вот почему вы должны добавить nextLine(), чтобы имя пользователя было прочитано из следующей строки ввода. – Eran

1

Он ведет себя так, потому что я совершенно уверен, что вы использовали один и тот же объект сканера для сканирования целых/двойные значения, прежде чем использовать его для сканирования имени.

Сказав это, вы не должны создавать несколько объектов сканера. (Вы никогда не должны этого делать).

Один простой способ справиться с этой проблемой - сканировать строки, даже если вы ожидаете целые числа/парные и отбрасываете их обратно.

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 
Смежные вопросы