неправильно работают простые string.equals - Java - PullRequest
0 голосов
/ 23 ноября 2011

Уже целую вечность я ломал голову над этим, и это меня просто озадачило.

У меня есть простое сравнение строк:

public static void login() 
{
    isIncorrectInput = true;

    while (isIncorrectInput) 
    {
        System.out.print("Please enter your password: ");
        password = readLine();

        if (password.equals(currentUser.password))
        {
            isIncorrectInput = false;
            System.out.print("Successful login!");
        } 
        else 
        {
            System.out.print("Incorrect password. Please try again.\n");
        }
    }
}

Итак, «пароль» - это строковая переменная, currentUser - это экземпляр объекта User, у которого есть свойство пароля.

Я пробовал переключать какой объект вызывается методом: не работает. Пробовал игнорировать дело: не работает. Пароли ОПРЕДЕЛЕННО одинаковы, я прошел через это бесчисленное количество раз, он просто возвращает false, когда должен возвращать true.

Что я делаю не так !!?

Заранее спасибо, ребята.

Ответы [ 4 ]

5 голосов
/ 23 ноября 2011

Не видя тела readLine (), я не уверен, но это, вероятно, проблема с пробелами Попробуйте выполнить trim() на входе перед сравнением.

2 голосов
/ 23 ноября 2011

Где вы инициализируете «пароль»?Переменная-пароль установлена ​​в пользовательском классе и у вас есть прямой доступ (общедоступный и т. Д.).

Что делает метод readLine ()?Возможно, вы пропустили пробел или символ новой строки, также проверьте, совпадает ли верхний / нижний регистр.Удачи.

2 голосов
/ 23 ноября 2011

вероятно, переменная пароля заканчивается символом '\ n' - попробовать:

password = password.trim();
2 голосов
/ 23 ноября 2011

Возможно, вам нужно подавить символ конца строки.

password.replace(System.getProperty("line.separator"),"");
...