Java if заявления - PullRequest
       9

Java if заявления

3 голосов
/ 13 ноября 2010

что-то не так с этим утверждением, если я пытаюсь создать систему свинг-входа ??? спасибо:)

 public void login()
    {
           String username = loginField.getText();
           char[] password = loginPass.getPassword();
           if (username.equals("test") && password.equals("test"))
           {
                    System.out.println("logged in");
           }
    }

Ответы [ 5 ]

6 голосов
/ 13 ноября 2010

Возможно, вы захотите

new String(password).equals("test")

вместо этого. Сравнение массива со строкой не имеет большого смысла.

2 голосов
/ 13 ноября 2010

Да. Часть, где вы проверяете пароль, неверна. password является char[]. Таким образом, вы должны изменить способ проверки:

Способ 1 : создать его строку

if (new String(password).equals("test"))

Способ 2 : перебирать массив и проверять char по char:

public boolean checkPassword(char[] pass, String correctPass)
{
    if (pass.length != correctPass.length()) return false;

    for (int i = 0; i < pass.length; i++)
    {
        if (pass[i] != correctPass.charAt(i)) return false;
    }
    return true;
}

А в вашем if-утверждении

if (checkPassword(password, "test"))
1 голос
/ 14 ноября 2010
password.equals("test")

всегда будет возвращать false, потому что test как String и password как char [] - это разные классы.Они никогда не могут быть равными.

Но вы можете использовать char [] представление String и проверять массивы на равенство с помощью boolean java.utilArrays.equals (char []a, char [] b) :

java.util.Arrays.equals(password,"test".toCharArray())

В реальной жизни у вас может не быть пароля в качестве String, но уже в качестве char [].Тогда, конечно, вы можете напрямую использовать его в Arrays#equals.

1 голос
/ 13 ноября 2010

Да. «пароль» - это массив - выполнение с ним равных является сравнительным сравнением. Конвертируйте его в строку и делайте на этом равные.

РЕДАКТИРОВАТЬ: похоже, это "правильный" способ:

private static boolean isPasswordCorrect(char[] input) {
    boolean isCorrect = true;
    char[] correctPassword = { 'b', 'u', 'g', 'a', 'b', 'o', 'o' };

    if (input.length != correctPassword.length) {
        isCorrect = false;
    } else {
        isCorrect = Arrays.equals (input, correctPassword);
    }

    //Zero out the password.
    Arrays.fill(correctPassword,'0');

    return isCorrect;
}

Из Java-учебников .

0 голосов
/ 13 ноября 2010

Символ [] не равен строке.Попробуйте создать из него строку:

new String(password).equals("test")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...