2014-12-02 3 views
1

사용자가 만든 "계정"을 보유하는 ArrayList를 만들었습니다. 나는 이제 ArrayList를 반복하고 "ArrayList"계정에 이미 존재하는 계정에 대해 사용자 입력을 검사하는 "로그인"함수를 작성하려고합니다. 이것은 내 루프입니다.ArrayList 문자열 비교

for(UserInfo createdUser : auctionAccounts){ 
    if(enteredUser.equals(createdUser.userName) && enteredPass.equals(createdUser.passWord)){ 
     System.out.println("Welcome: " +createdUser.userName); 
     returnToMenu();     
    }else{ 
     System.out.println("Username or Password is wrong!"); 
     loginAccount(aI);    
    } 
} 

ArrayList에 계정이 하나만있는 경우에는 정상적으로 작동합니다. 그러나 목록에 둘 이상의 계정이있는 경우 첫 번째 계정에만 로그인 할 수 있으며 그 이후에는 로그인 할 수 없습니다.

.equals() 대신 ArrayList.contains() 메서드를 사용해 보았지만 동일한 결과가 나타납니다.

수정 : 추가하기 만하면 계정을 만드는 방법입니다. 당신이해야

UserInfo createdUser = new UserInfo(); 

System.out.println("---- Enter a username ----"); 
createdUser.setUsername(scanner.next()); 

System.out.println("---- Enter a password ----"); 
createdUser.setPass(scanner.next()); 

this.aI.createAccount(createdUser); 
accountHandler(aI); 

답변

2

우선은 사용자 이름과 암호를 일치 시키려고 루프 내부의 else 부분을 제거합니다.

이유는 전체 목록을 확인할 때까지 사용자 이름/pw 조합이 잘못된 인지 여부를 알 수 없기 때문입니다.

그러나 사용자가 입력 한 내용이 목록의 첫 번째 사용자과 일치하지 않는 경우 잘못된 정보 을 입력했다고 사용자에게 알립니다.

기본적으로 사용자가 로그인을 시도 할 때마다 모든 기존 사용자와 일치시켜야하기 때문에 올바른 정보를 입력했는지 확인하기 전에 전체 목록을 반복해야합니다. 여기

는 코드를 같이 수있는 방법입니다 :

for(UserInfo createdUser : auctionAccounts){ 
    if(enteredUser.equals(createdUser.userName) && enteredPass.equals(createdUser.passWord)){ 
     System.out.println("Welcome: " +createdUser.userName); 
     returnToMenu();     
    } 
} 
// if this point is reached, then username and pw are invalid 
System.out.println("Username or Password is wrong!"); 

당신은 전체 목록을 사용자가 충분히 큰에 매우 비효율적 일 수 있기 때문에 (로그인을 시도 할 때마다 반복하지 않으려면 사용자 수), 사용자 이름을 정확한 비밀번호와 연결시키는 일종의 Map을 사용할 수 있습니다. 이렇게하면 빠른 검색 표를 사용하고 모든 사용자에 대해 반복을 제거 할 수 있습니다.

Map<String, UserInfo> auctionAccounts; 
// initialization, your other code ... 
if(auctionAccounts.get(enteredUser) != null &&      // user with entered username exists 
    auctionAccounts.get(enteredUser).password.equals(enteredPass) { // entered password is correct 
    // SUCCESSFULL LOGIN 
} else { 
    // INVALID USERNAME or PASSWORD 
}