Метод equals не работает во всех циклах do, кроме последнего

Рейтинг: 0Ответов: 0Опубликовано: 28.02.2023
public static void userRegistration() {
    Scanner in = new Scanner(System.in);
    User user = new User();
    System.out.println("Зарегистрируйте пользователя");
    System.out.println("Введите фамилию");
    user.setLastName(in.nextLine());
    System.out.println("Введите имя");
    user.setFirstName(in.nextLine());
    System.out.println("Введите отчество");
    user.setSurName(in.nextLine());
    System.out.println("Введите номер телефона");
    while (!user.setPhoneNumber(in.nextLine())) ;
    boolean notunique;
    
    do {
        notunique = false;
        System.out.println("Введите e-mail");
        for (User emailCheck : users) {
            while (!user.setEmail(in.nextLine())) ;
            if (emailCheck.equals(user)) {
                System.out.println("Такой e-mail уже существует, введите другой");
                notunique = true;
            }
        }
    }
    while (notunique);

    do {
        notunique = false;
        System.out.println("Введите логин");
        user.setLogin(in.nextLine());
        for (User loginCheck : users) {
            if (loginCheck.equals(user)) {
                System.out.println("Такой логин уже существует, введите другой");
                notunique = true;
            }
        }
    }
    while (notunique);

    System.out.println("Введите пароль");
    user.setPassword(in.nextLine());
    user.setUserType("guest");
    users.add(user);
    System.out.println("Пользователь добавлен");
}

Добавление нового пользователя в ArrayList. Циклами do проверяется e-mail и логин на уникальность при помощи метода equals. Если проверка уникальности только одна (один цикл do), все работает (выдает сообщение о существовании такого же логина или e-mail, если он уже есть в списке, просит ввести заново). Если две или больше, то выполняется только последний.

Полазил по другим темам и видеоурокам на ютюбе, поэкспериментировал с переопределением методов equals() и hashCode() - результат пока тот же. Причем, если делаю всё не через сеттеры, а объявляя переменные перед циклом do, то при таком же подходе все работает. Но задание требует делать всё через сеттеры, что бы параллельно еще проверялось соответствие вводимых значений регулярным выражениям в классе User. Подскажите, почему не выполняются проверки во всех циклах?

Ответы

Ответов пока нет.