2016-12-23 1 views
-2

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

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 –

+0

, возможно, вы хотите проверить, содержит ли список ваше имя пользователя –

+0

В будущем пожалуйста показать ошибки. Пожалуйста, обратитесь к: [Ask]. Вы даже не потрудились завершить 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 (индекс); ^ Требуется: Строка найдено: int 1 ошибка как я могу это исправить? Спасибо – Hendra

+0

@ Хендра О, ух! Виноват! Это была опечатка. Замените эту строку на 'String correctPassword = PasswordList.get (index);' – Sweeper

+0

Спасибо, мистер Свитер, ваш ответ действительно помог мне :) – Hendra