Как правильно использовать класс Scanner?

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() .
Показать ещё 3 комментария
Теги:

2 ответа

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
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?
  • 0
    @ user2603506 Конец строки ввода, который содержал int, прочитанный nextInt (), был возвращен следующим вызовом nextLine (). Вот почему вы должны добавить nextLine (), чтобы имя пользователя было прочитано из следующей строки ввода.

Ещё вопросы

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