2015-04-16 1 views
1

Я изучаю Java и написал простую программу входа, чтобы проверить, что я могу использовать то, что я узнал правильно, до сих пор у меня есть имена пользователей и пароли, хранящиеся как отдельные переменные. Я решил использовать оператор switch для хранения имен пользователей и паролей и назначения их на основе идентификатора пользователя, который вводит пользователь. Это кодпрограмма, кажется, пропустит раздел инструкции if, переместившись в инструкцию else, прежде чем вернуться в нужное место.

import java.util.Scanner; 

public class Login { 

public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 
    int user_attempt = 0; 
    int pass_attempt = 3; 
    Boolean LoginSuccessful; 
    String user_name = null; 
    String pass = null; 

    System.out.println("Enter your user ID: "); 
    int user = input.nextInt(); 

    switch (user){ 
    case 1: user_name = "lucas"; 
      pass = "password"; 
     break; 
    case 2: user_name = "dave"; 
      pass = "password2"; 
     break; 
    default: System.out.println("User ID not valid"); 
    } 


    while(user_attempt < 5){ 

    System.out.println("Enter your username: "); 
    String username = input.nextLine(); 


    if (username.equals(user_name)){ 
     while(pass_attempt > 0){ 
     System.out.println("Enter your password: "); 
     String password = input.nextLine(); 
     if(password.equals(pass)){ 
      System.out.println("Login Sucessful"); 
      LoginSuccessful = true; 
      break; 
     } 
     else{ 
      pass_attempt--; 
      System.out.println("Incorrect password, attempts remaining " + pass_attempt); 
     } 
    } 
     break; 
    } 
    else{ 
     System.out.println("Username is not valid!"); 
     user_attempt++; 
    } 

    } 

    if(LoginSuccessful = true){ 
     System.out.println(" "); 
    } 
    else{ 
    System.out.println("Login Failed."); 
    } 
    } 

}

Все, кажется, работает нормально, за исключением, когда я запускаю программу и введите идентификатор пользователя, я получаю эту

Введите идентификатор пользователя: Введите имя пользователя : Имя пользователя недействительно! Введите имя пользователя:

вместо

Введите идентификатор пользователя: Введите имя пользователя:

Я не могу понять, почему это происходит, как функции программы, как правило, с этого момента, позволяя я вводим имя пользователя и пароль и выполняя правильные функции, если они верны/неправильны. Любая помощь с этим будет оценена!

ответ

2

Добавить input.nextLine(); перед тем while(user_attempt < 5){ потреблять возвращение новой строки/каретки, оставленную nextInt()

+1

Спасибо, что работали и теперь программа работает так, как я хотел, чтобы это – lucasRHCP

+0

На самом деле я думаю, что это только исправили проблему, а не фиксированной он, если я сделаю какие-либо изменения в коде, тогда, когда я запустил его, проблема вернется. – lucasRHCP

+0

@lucasRHCP - Ну, если вы хотите исправить это, используйте 'Integer.parseInt (scanner.nextLine())', а затем удалите * дополнительную * 'nextLine()'. Это исправит * правильно *. Остерегайтесь 'NumberFormatException', хотя :) – TheLostMind

Смежные вопросы