Как посмотреть, совпадает ли пароль в массиве объектов - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь проверить, совпадает ли пароль, введенный пользователем в методе addUser (), с паролем, введенным пользователем в методе deleteUser ().Оба метода просматривают пользовательский массив, который заполнен объектами FacebookUser. Однако я не могу понять, как сопоставить соответствующие пароли для каждого метода.

Я пробовал несколько кодов, которые едва помню, иногда я 'я всегда получаю «неправильный пароль», возвращаемый, даже когда он верен. Но если бы в моем массиве был только один объект, он работал, пока я не добавил другого пользователя.Это приведет к тому, что оба пользователя получат один и тот же пароль.

public class Facebook extends FacebookUser implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    Scanner input = new Scanner(System.in);
    private ArrayList<FacebookUser> users;

    public Facebook(String username, String password) {
        super(username, password);
        users = new ArrayList<>();

    }

    // prints users
    public void listUsers() {
        if( users.isEmpty())
        {
            System.out.println("List is empty");
        }
        else
        {
            for (FacebookUser users : this.users)

            {
            System.out.println("Username: " + users.getUsername());
            }
        }
    }


    // adds a user

    public void addUser() {

        //creating an instance of FacebookUser class
        FacebookUser user1 = new FacebookUser();

        System.out.println("Enter username to add: ");
        String newUser = input.nextLine();
        user1.setUsername(newUser);
    // using the setter method in UserAccount to set the username for "fb" object


        //if statement checks if any object contains the same username  
        if (users.contains(user1)) { 
            System.out.println("Error, username already exists");

        } 
        else {

            System.out.println("Please enter password: ");
            String password = input.nextLine();
            System.out.println("Please enter password hint: ");
            String passwordHint = input.nextLine();

            FacebookUser user2 = new FacebookUser();
            //creating another object for the "official" new user

            user2.setPassword(password);
            user2.setUsername(newUser);
            user2.setPasswordHint(passwordHint);

            users.add(user2);

            System.out.println(newUser + " has been added");

        }
    }

    // deletes a user
    public void deleteUser() {

    FacebookUser user1= new FacebookUser();
    System.out.println("Enter username you want to remove: ");
    String removeUser = input.nextLine();   


    user1.setUsername(removeUser);



        if (users.contains(user1)) {
            System.out.println("Enter password");
            String checkPassword = input.nextLine();
                    user1.setPassword(checkPassword);

            if (user1.password.equals(checkPassword)) {
                users.remove(user1);
                System.out.println(removeUser + " has been removed");
            } else {
                System.out.println("Incorrect password");
            }
        } else {
            System.out.println("User does not exist");

        }
    }

Ответы [ 3 ]

0 голосов
/ 03 февраля 2019

Если вы не переопределите реализацию содержимого, ваш код не будет работать.Попробуйте что-то похожее на это.

    public void deleteUser() {

        FacebookUser user1= new FacebookUser();
        System.out.println("Enter username you want to remove: ");
        String removeUser = input.nextLine();  
        boolean isPresent = false; 
        for(FacebookUser user:users){
        if(user.getUsername.equals(removeUser)){
                isPresent = true;
            System.out.println("Enter Password");
            password = sc.nextLine();
            if(user.getPassword.equals(password)){
                users.remove(user);
                break;
            }else{
            System.out.println("Incorrect Password");
            }
        }
        }
        if(!isPresent){
        System.out.pritln("User does not exist");
        }
        }
0 голосов
/ 03 февраля 2019

Попробуйте это.Когда вы используете user.contain (user1), он будет сравнивать все поля пользователя 1 в user.т.е. он проверит для пользователя, имеющего то же имя пользователя и пароль, что и user1.Но пароль для этого пользователя 1 не установлен ранее.Следовательно, он никогда не найдет его в списке.

, и когда вы используете .remove () для arraylist, он принимает индекс в качестве аргумента.Поэтому всегда передавайте индекс удаляемого пользователя, а не пользователя.

Если все-таки есть ошибка, опубликуйте ошибку в комментарии, и я сообщу вам решение.

public void deleteUser() {

    FacebookUser user1= new FacebookUser();
    System.out.println("Enter username you want to remove: ");
    String removeUser = input.nextLine();   

    int i=0;
    for(FacebookUser users:this.users)
    {
        boolean present = false;
        if(users.getUserName().equals(removeuser))
        {
            present = true;
            System.out.println("Enter password");
            String checkPassword = input.nextLine();
                    users.setPassword(checkPassword);
            if(users.getPassword().equals(checkPassword))
            {
                  this.users.remove(i);
                  System.out.println(removeUser + " has been removed");
                  break;
            }
            else
                System.out.println("Incorrect password");


        }
        i++;
    }
    if(!present)

        System.out.println("User does not exist");

}
0 голосов
/ 03 февраля 2019

Проблема в том, что в deleteUser() вы устанавливаете введенный пользователем пароль на user1 перед проверкой пароля с помощью if (user1.password.equals(checkPassword)).Итак, это if условие всегда true.

Я прокомментировал эту ненужную строку в приведенном ниже коде.

(я полагаю, вы правильно переопределили метод equals() в FacebookUserкласс. Потому что методы contains() и remove() полагаются на метод equals().)

public void deleteUser() {

FacebookUser user1= new FacebookUser();
System.out.println("Enter username you want to remove: ");
String removeUser = input.nextLine();   


user1.setUsername(removeUser);



    if (users.contains(user1)) {
        System.out.println("Enter password");
        String checkPassword = input.nextLine();
                // I commented this line
                //user1.setPassword(checkPassword);

        if (user1.password.equals(checkPassword)) {
            users.remove(user1);
            System.out.println(removeUser + " has been removed");
        } else {
            System.out.println("Incorrect password");
        }
    } else {
        System.out.println("User does not exist");

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...