Неверный ввод, хотя это правильный ввод - PullRequest
0 голосов
/ 13 февраля 2020

Я довольно новичок в Java и столкнулся с некоторыми трудностями. Поэтому я получил указание запустить программу, в которой вы войдете в систему, введя пин-код и название школы. У вас есть 3 попытки для каждой, пока не появится сообщение о том, что вход не выполнен. Моя проблема Все хорошо, но в разделе PIN-код , (userInputPin == PIN) автоматически вводится "Попытка # 2 - введите название школы - неверно. при первая правильная попытка. При написании правильного названия школы также отображается ошибка входа в систему, когда он должен уведомить вас о том, что вы вошли в систему. В чем ошибка?

Примечание: игнорировать комментарий, я ' исправлю их.

public class Login {

    public static final int PIN = 1234; //Declaring constant for fixed PIN

    //Declaring constant for first school name
    public static final String FIRST_SCHOOL = "St. Charles"; 

    public static void main(String[] args) {


        Scanner kb = new Scanner (System.in); //Declaring scanner object

        int attempts = 1; //Declaring variable for attempt number

        //Printing first paragraph section of the program
        System.out.println("This program simulates logging into a bank account,"
                + "\nasking certain questions for security.\n");

        // PIN Section
        while(attempts<=3) //While loop
        {
          System.out.print("Attempt #"+attempts+" - Enter PIN: "); 
          int userInputPin = kb.nextInt(); //User inputs pin number

          //Conditional situations
          if(userInputPin==PIN)
          {
              attempts=1;
              while(attempts<=3)
        {
            System.out.print("\nAttempt #"+ attempts+" - Enter your first school: ");
            String userInputSchool = kb.next();

            //Conditional situations
            if(userInputSchool.equals(FIRST_SCHOOL))
                {
                System.out.println("\nYou're logged in.");
                }
            else{
                if(attempts==3)
                {
                    System.out.println("\nLogin failed.");
                }
                else
                {
                    System.out.println("Incorrect.\n");
                }
            }
           attempts++;
        }

          }
          else{
              if(attempts==3){
                  System.out.println("\nLogin failed.");
              }
              else{
                  System.out.println("Incorrect.\n");
              }
          }
        attempts++; //Increments attempt by 1 when PIN is incorrect          
        }

1 Ответ

1 голос
/ 13 февраля 2020

Ах да, вы, старый сканер. Я не могу начать говорить, сколько раз я страдал от одной и той же проблемы.

Проблема заключается в том, что функция nextInt() иногда рассматривает клавишу ввода как другой токен. Поэтому, когда вы вводите первое значение, nextInt () распознает введенное число. Но после печати второго сообщения объект сканера все еще имеет сохраненный ключ ввода. Единственный способ продвинуться вперед - это очистить объект следующим образом:

if(kb.hasNext()) kb.nextLine();

Вставляйте это после каждого ввода номера.

...