2016-08-21 56 views
-2

我想將用戶名「carl」與密碼「0001」以及其他元素相匹配,但它不起作用。任何人都可以解釋我如何匹配「用戶名」的每個元素與「密碼」的元素?非常感謝你! 這是我的代碼:在java中匹配用戶名和密碼索引的索引

class log{ 
    BufferedReader br= new BufferedReader(new InputStreamReader(System.in)); 
    String [] username ={"carl", "may", "joseph", "oliver", "ashley"}; 
    String []password={"0001", "0002", "0003", "0004", "0005"}; 

    public void login() throws IOException{ 
    System.out.print("\nUSERNAME: "); 
    uname=br.readLine(); 
    System.out.print("PASSWORD: "); 
    pword=br.readLine(); 

    for (j = 0; j <= 4; j++) { 
     if (username[j].equals(password[j])) { 
      uname=username[j]; 
      pword=password[j]; 
    }   
} 
while((!uname.equals(password[j]))&&(!pword.equals(username[j]))){ 
    System.out.println("Invalid username/password."); 
    System.out.print("\nUSERNAME: "); 
    uname=br.readLine(); 
    System.out.print("PASSWORD: "); 
    pword=br.readLine(); 
} 

public void main(String[] args)throws IOException { 
     log b=new log(); 
     b.login(); 
} 
+3

這就是所謂的*並行陣列*,是一個非常糟糕的模式。使用名稱和密碼作爲字段的'class User'而不是使用多個數組。這將使您的邏輯更簡單,更易於調試。 – chrylis

+0

* carl *等於* 0001 *如何?在你的if條件中,你必須比較* username [j] .equals(uname)&& passwords [j] .equals(pword)*。 –

+0

將-1置於該問題的人。我認爲這個問題很明顯。不要忘記,你的編程開始就是這樣的。只是合作。 –

回答

0

我想你應該修改你的方法在下列方式

public void login() throws IOException { 
    System.out.print("\nUSERNAME: "); 
    uname = br.readLine(); 
    System.out.print("PASSWORD: "); 
    pword = br.readLine(); 

    while (!isValid(uname, pword)) { 
     System.out.println("Invalid username/password."); 
     System.out.print("\nUSERNAME: "); 
     uname = br.readLine(); 
     System.out.print("PASSWORD: "); 
     pword = br.readLine(); 
    } 
} 
//checks if the entered username and password are correct 
public boolean isValid(String uname, String pword) { 
    for (int j = 0; j <username.length; j++) { 
     if (username[j].equals(uname)) { 
      if (!password[j].equals(pword)) 
       return false; 
      else 
       return true; 
     } 
    } 
    return false; 
} 
+0

很好的幫助!非常感謝你! – denden

0

我覺得它更好,當你有一個額外的類User工作。

類看起來是這樣的:

class User { 
    private String name; 
    private String pw; 
    public User (String name, String pw) { 
     this.name = name; 
     this.pw = pw; 
    } 
    public String getName() { 
     return this.name; 
    } 
    public String getPw() { 
     return this.pw; 
    } 
} 

在你的程序邏輯,你必須與所有用戶的列表:

ArrayList<User> userList 

現在你有更改登錄算法:

class log{ 
    BufferedReader br= new BufferedReader(new InputStreamReader(System.in)); 
    ArrayList<User> userList = ...; //Here you have to add all users first 

    boolean loginCheck = false; 
    while(loginCheck == false) { 
     System.out.print("\nUSERNAME: "); 
     uname = br.readLine(); 
     System.out.print("PASSWORD: "); 
     pword = br.readLine(); 
     for (int i = 0; i < userList.size(); i++) { 
      if (userList.get(i).getName.equals(uname) && userList.get(i).getPw.equals(pword)) { 
       loginCheck = true; 
       break; 
      } 
     } 

    }    
}  

public void main(String[] args)throws IOException { 
     log b=new log(); 
     b.login(); 
} 

如果將用戶輸入的檢查更改爲:

for (int i = 0; i < userList.size(); i++) { 
      if (userList.get(i).getName.equals(uname)) { 
       if (userList.get(i).getPw.equals(pword)) { 
        loginCheck = true; 
        break; 
       } else { 
        break; 
       }     
      } 
} 
+0

非常感謝您的幫助! – denden

+0

@denden不客氣 – Blobonat

0

你可以使用OOP(面向對象編程),使其更容易在求解廣義你的問題:

這裏是我的樣品溶液:

用戶等級:

class User { 

private String username; 
private String password; 

public User(String username, String password) { 
    this.username = username; 
    this.password = password; 
} 

public String getUsername() { 
    return username; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 

@Override 
public boolean equals(Object o) { 
    User user2 = (User) o; 
    if (this.username.equals(user2.getUsername()) && this.password.equals(user2.getPassword())) 
     return true; 

    return false; 
} 

}

登錄類:

public class Login { 


private User[] users = new User[]{ 
     new User("carl", "0001"), 
     new User("may", "0002"), 
     new User("joseph", "0003"), 
     new User("oliver", "0004"), 
     new User("ashley", "0005"), 
}; 


public static void main(String args[]) throws IOException { 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

    System.out.print("\nUSERNAME: "); 
    String uname = br.readLine(); 
    System.out.print("PASSWORD: "); 
    String pword = br.readLine(); 


    boolean success = new Login().login(new User(uname, pword)); 
    if (success) 
     System.out.println("The user account is valid, login"); 
    else 
     System.out.println("The username and/or password is invalid."); 


} 

public boolean login(User user) { 
    for (int i = 0; i < users.length; i++) { 
     if (users[i].equals(user)) 
      return true; 
    } 

    return false; 
} 

}

+0

非常感謝您的幫助! – denden