2010-11-13 6 views
3

est-il quelque chose de mal avec cette déclaration si j'essaie de faire un système de connexion swing? merci :)Java si les déclarations

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

Votre exigence n'est pas claire. C'est pourquoi je ne peux pas dire si cela fonctionne correctement. –

+0

Ne jamais coder en dur certains noms d'utilisateur/mot de passe dans le code source, même à des fins de test. La suppression de ces informations d'identification du code de production sera oubliée et, par conséquent, une connexion par défaut pour les pirates est disponible. –

+0

Vous faites dix-sept choses qui n'ont rien à voir avec cette question. Merci d'avoir acheté StackOverflow. –

Répondre

0

Le caractère [] ne correspond pas à une chaîne. Essayez d'en créer une chaîne:

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

-1 Si c'était une bonne idée pour le champ de mot de passe d'utiliser une chaîne pour le mot de passe, il ne serait pas dérangé d'utiliser un tableau char. –

+0

Je ai suggéré que de convertir le tableau de char dans une chaîne, de ne pas modifier le champ d'entrée. – Mnementh

1

Oui. 'mot de passe' est un tableau - faire un égal sur c'est une comparaison de référence. Convertissez-le en String et faites-le égal.

EDIT: Il ressemble à ceci est la façon "correcte":

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; 
} 

De l'java tutorials.

+0

@Pete - Illuminez-moi. Pourquoi est-ce une mauvaise idée alors? – javamonkey79

+0

@Pete - Peut-être que vous pouvez poster votre solution. Comme on dirait que tout le monde ici a tort? :) – javamonkey79

+0

@Pete - NM, je pense que je comprends. Merci pour l'information. – javamonkey79

6

Vous pouvez

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

à la place. Comparer un tableau à une chaîne n'a pas de sens.

+0

merci ça marche !!! :) – SteT

+1

-1 Si c'était une bonne idée pour le champ de mot de passe d'utiliser une chaîne pour le mot de passe, il ne serait pas la peine d'utiliser un tableau char. –

+0

@Pete Kirkham: Expliquez pourquoi la chaîne devrait être une mauvaise solution (à part le fait que la réponse suggère seulement de convertir le tableau pour la vérification). – Mnementh

2

Oui. La partie où vous vérifiez le mot de passe est erronée. password est un char[]. Donc, vous devez changer la façon de le vérifier:

Way 1: Créer une chaîne de celui-ci

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

Way 2: itérer sur le tableau et vérifier ombles par 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; 
} 

Et dans votre instruction if

if (checkPassword(password, "test")) 
+0

Vous devez également mettre à zéro le tableau char. –

+0

Cela semblerait plus simple avec 'Arrays.equals'. –

1
password.equals("test") 

retournera toujours false, car test comme chaîne et password comme char [] sont des classes différentes. Ils ne peuvent jamais être égaux.

Mais vous pouvez utiliser la char[] representation of the String et vérifier les tableaux sur l'égalité via boolean java.utilArrays.equals(char[] a,char[] b):

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

Dans la vraie vie, vous pouvez n'aurez pas le mot de passe sous forme de chaîne, mais déjà en tant que char []. Ensuite, bien sûr, vous pouvez l'utiliser directement dans Arrays#equals.

Questions connexes