2016-12-23 5 views
-2

私のプログラミングコードについて聞いてみたいと思います。間違いがあるようです。以下のコードを確認してください。期待していたものではありませんでした。問題は、私は正しいユーザー名を帰しているが、それは再び繰り返されることである。私は実際には問題はこれらの2つの方法であるすべてのあなたの答えJavaでサインアップとログインIDを作成する方法

static Scanner scan; 
static ArrayList<String> EmailList; 
static ArrayList<String> FullNameList; 
static ArrayList<String> UsernameList; 
static ArrayList<String> PasswordList; 

public static void clear(){ 
    for(int i =0; i < 24; i++){ 
     System.out.println(); 
    } 
} 

public static boolean ouragreement (String agreement){ 
    if(agreement.isEmpty()){ 
     return false; 
     } 
    else if(agreement.equalsIgnoreCase("N") || agreement.equalsIgnoreCase ("No")){ 

     return false; 

     } 
    return true; 

    } 

public static boolean validateusername (String username, ArrayList<String>UsernameList){ 
    if(username.isEmpty()){ 

     System.out.println("Username cannot be empty"); 
     return false; 

     } 

    else if(!username.equals(UsernameList.size())){ 

     System.out.println("Please input again your username"); 
     return false; 

     } 
    return true; 

    }//validateusername 


public static boolean validatepassword(String password, ArrayList<String>PasswordList){ 

    if(password.isEmpty()){ 

     System.out.println("Password cannot be empty"); 
     return false; 
     } 
    else if(!password.equals(PasswordList.size())){ 

     System.out.println("Please input again your password"); 
     return false; 

     } 

    return true; 



    }//validatepassword 




public static void case1(){ 

    String email, fullname, username, password, agreement; 

    System.out.print("Input your email : "); 
    email = scan.nextLine(); 
    System.out.print("Input your Full name : "); 
    fullname = scan.nextLine(); 
    System.out.print("Input your username : "); 
    username = scan.nextLine(); 
    System.out.print("Input your password : "); 
    password = scan.nextLine(); 

    EmailList.add(email); 
    FullNameList.add(fullname); 
    UsernameList.add(username); 
    PasswordList.add(password); 


    do{ 
     System.out.print("If you say Yes[Y], you agreed to our Terms & Privacy Policy [Y/N] : "); 
     agreement = scan.nextLine(); 
    }while(!ouragreement(agreement)); 


    clear(); 
     System.out.println("Sign Up Success!"); 

     System.out.println(); 



    }//case1 




public static void case2(){ 

    String username,password; 

    do{ 
     System.out.print("Username : "); 
     username = scan.nextLine(); 
    }while(!validateusername(username,UsernameList)); 

    do{ 
     System.out.print("Password : "); 
     password = scan.nextLine(); 
    }while(!validatepassword(password,PasswordList)); 


    System.out.println("Welcome"); 







    }//case2 



public static void inisialisasi(){ 

    scan = new Scanner (System.in); 
    EmailList = new ArrayList<>(); 
    FullNameList = new ArrayList <>(); 
    UsernameList = new ArrayList<>(); 
    PasswordList = new ArrayList<>(); 


    }//inisialisasi 




public static void main (String [] args){ 

    inisialisasi(); 

    int choose; 

    do{ 
    System.out.println("\tKOSTFINDER APPLICATION"); 
    System.out.println("\t======================\n"); 


    System.out.println("Welcome to KostFinder Application, please choose option below"); 

    System.out.println("1. Sign up"); 
    System.out.println("2. Login"); 
    System.out.print("Choose :"); 
    choose = scan.nextInt(); scan.nextLine(); 
    switch(choose){ 
     case 1 : 
     case1(); 
     break; 

     case 2 : 
     case2(); 
     break; 


     } 
}while(choose != 101); 






    }//main 






}//public class 
+0

if(!username.equals(UsernameList.size()))は、文字列をintと比較しているため、常にtrueになる –

+0

おそらくリストにあなたのユーザ名が含まれているかどうかをチェックしたい –

+0

将来的にスローされたエラーを表示します。を参照してください:[質問]。あなたはまた、投稿する前に2分間のサイトツアーを完了するのにも気にしませんでした。 –

答えて

0

をいただければと思います:

public static boolean validateusername (String username, ArrayList<String>UsernameList){ 
    if(username.isEmpty()){ 

     System.out.println("Username cannot be empty"); 
     return false; 

     } 

    else if(!username.equals(UsernameList.size())){ 

     System.out.println("Please input again your username"); 
     return false; 

     } 
    return true; 

}//validateusername 


public static boolean validatepassword(String password, ArrayList<String>PasswordList){ 

    if(password.isEmpty()){ 

     System.out.println("Password cannot be empty"); 
     return false; 
     } 
    else if(!password.equals(PasswordList.size())){ 

     System.out.println("Please input again your password"); 
     return false; 

     } 

    return true; 



}//validatepassword 

条件!password.equals(PasswordList.size())はあまり意味がありません。ユーザー名リストに入力したユーザー名のインデックスを見つけ、パスワードリストのそのインデックスにあるパスワードを探し、入力したパスワードがそのパスワードと等しいかどうかを確認する必要があります。つまり、パスワードとユーザー名の両方を検証する単一のメソッドを実際に作成する必要があります。これは、パスワードとユーザー名が非常に関連しているためです。パスワードが正しいかどうかは、ユーザー名を知らなくてもわかりません。

また、リストに追加された新しいユーザー名が重複しているかどうかを確認しませんでした。空のユーザー名とパスワードは、ログイン時に許可しないでサインアッププロセスで入力することを許可したことは言うまでもありませんが、これは前の段落で説明した問題と比較して小さい問題です。

あなたvalidateUsernameAndPassword方法は次のようになります。

public static boolean validateUsernameAndPassword(String username, String password) { 
    int index = UsernameList.indexOf(username); 
    if (index == -1) { 
     System.out.println("The user name does not exist"); 
     return false; 
    } 
    String correctPassword = PasswordList.get(index); 
    if (correctPassword.equals(password)) { 
     return true; 
    } else { 
     System.out.println("Please input again your password"); 
     return false; 
    } 
} 

注:パスワードを保存するこの方法は、非常に安全ではありません。私はこれが生産コードではないことを理解していますが、実動コードではこれをしないでください。少なくともハッシュアルゴリズムを実行する必要があります。

+0

Mr Sweeper、私のテキストパッド内にコードを入れていただきありがとうございます7、エラーがあり、マッサージは エラーです:互換性のないタイプ 文字列correctPassword = PasswordList.indexOf(index); ^ 必須:文字列 が見つかりました: 1エラー どうすれば修正できますか?ありがとうございます – Hendra

+0

@Hendra Oh oops!私の悪い!それはタイプミスでした。その文字列を 'String correctPassword = PasswordList.get(index);' – Sweeper

+0

に置き換えてください。ありがとうございます。Sweeperさん、本当にありがとうございました。 – Hendra

関連する問題