IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Probleme d'ArrayList


Sujet :

Collection et Stream Java

  1. #21
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut
    autre petit probleme , j'essais de faire une class admin qui gere les commande d'admin , j'ai un petit probleme au niveau des permissions , voila le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    package ircBot.commands.admin;
     
    import java.util.ArrayList;
     
    import ircBot.KBot;
    import ircBot.commands.admin.*;
     
    public class admin {
     
    	public static void execute(KBot k, String sender, String login,
    			String hostname, String[] command) {
    		String pass = "***";
    		// Commande D'authentification
    		ArrayList<String> users = new ArrayList();
    		if (users.contains(sender)) {
    			// Commande d'arret du bot
    			if (command[1].equalsIgnoreCase("quit")) {
    				quit.execute(k, sender, login, hostname, command);
    			}
    			else if (command[1].equalsIgnoreCase("auth")) {
    				k.sendMessage(sender, "Tentative d'authentification ...");
    				if (command[2].equals(pass)) {
    					users.add(sender);
    					k.sendMessage(sender, "OK!");
    				} else {
    					k.sendMessage(sender, "Mot de passe Incorrect !");
    				}
    			}
    		}
    		else
    		{
    			k.sendMessage(sender,"Accée refusé , veuillez vous authentifier !");
    		}
     
    	}
    }
    je voudrais que quand je tape :
    !admin auth MotDePasse
    il ajoute mon login (ici sender) a la liste des authentifié (ici users)
    et que pour les commandes privé il detecte si le pseudo est bien dedans avec users.contains(sender) , mais j'ai l'impression que ca ne fonctionne pas ...
    il me renvoie toujour: Accée refusé , veuillez vous authentifier ! (meme pour !admin auth)

    autre probleme , a chaque fois que cette classe va etre appeler , les données vont etre ecraser ? parceque ca risque de poser probleme sur que users doit contenir les login authentifier , si ca le remet a zero a chaque commande !admin , c'est pas top :p

  2. #22
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Si je comprend bien, dans ton code "sender" correspond à "loginId" et "login" correspond à "password". Tu mélanges un peu les noms de variables donc ca devient compliqué...

    Ok voici le probleme, tu vérifies si "sender" est dans "users". Mais le probleme c'est que ta liste de users est vide, tu viens tout juste de la créer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<String> users = new ArrayList();
    alors c'est normal que
    te retourne toujours false. et tu vas directement à "Accée refusé"

    Ecris ton algorithme en pseudo-code avant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SI loginId est dans la liste ALORS
        effectue les commandes
    SINON SI la commande est "auth" ALORS
        Ajoute le loginID
    SINON 
        "Accée refusé"
    Toi ton code en ce moment correspond a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SI loginId est dans la liste ALORS
        SI la commant est quitter ALORS
             effectue la commande quitter
        SINON SI la commande est "auth" ALORS
              Ajoute le loginID
    SINON 
        "Accée refusé"
    Tu vois que si le login est pas dans la liste alors c'est fini pour ta gueule. Je te laisse penser a ce que tu devrais faire comme changement dans ton code. Si jamais tu y arrive pas fais moi signe je te le ferai.. c'est pas un gros changement!

  3. #23
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut
    voila j'ai modifié le code comme il faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    package ircBot.commands.admin;
     
    import java.util.ArrayList;
     
    import ircBot.KBot;
    import ircBot.commands.admin.*;
     
    public class admin {
     
    	public static void execute(KBot k, String sender, String login,
    			String hostname, String[] command) {
    		String pass = "***";
    		// Commande D'authentification
    		ArrayList<String> users = new ArrayList();
    		if (users.contains(sender)) {
    			// Commande d'arret du bot
    			if (command[1].equalsIgnoreCase("quit")) {
    				quit.execute(k, sender, login, hostname, command);
    			}
    		}
    		else if (command[1].equalsIgnoreCase("auth")) {
    			k.sendMessage(sender, "Tentative d'authentification ...");
    			if (command[2].equals(pass)) {
    				users.add(sender);
    				k.sendMessage(sender, "OK!");
    			} else {
    				k.sendMessage(sender, "Mot de passe Incorrect !");
    			}
    		}
    		else
    		{
    			k.sendMessage(sender,"Accée refusé , veuillez vous authentifier !");
    		}
     
    	}
    }
    le probleme c'est qu'a chaque fois que mon bot appel cette classe , comme c'est une classe statique , mon ArrayList est remis a zero , donc les users authentifié effacer ... comment regler ce probleme ? :/

  4. #24
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    Pour que tous les utilisaterus se partage la meme ressource (ArrayList<String> users) il faut que celle-ci soit static.

    Tu peux mettre une ressource static seulement à l'extérieur d'une méthode

    Donc voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    package ircBot.commands.admin;
     
    import java.util.ArrayList;
     
    import ircBot.KBot;
    import ircBot.commands.admin.*;
     
    public class admin {
     
           private static ArrayList<String> users = new ArrayList();
     
    	public static void execute(KBot k, String sender, String login,
    			String hostname, String[] command) {
    		String pass = "***";
    		// Commande D'authentification
     
    		if (users.contains(sender)) {
    			// Commande d'arret du bot
    			if (command[1].equalsIgnoreCase("quit")) {
    				quit.execute(k, sender, login, hostname, command);
    			}
    		}
    		else if (command[1].equalsIgnoreCase("auth")) {
    			k.sendMessage(sender, "Tentative d'authentification ...");
    			if (command[2].equals(pass)) {
    				users.add(sender);
    				k.sendMessage(sender, "OK!");
    			} else {
    				k.sendMessage(sender, "Mot de passe Incorrect !");
    			}
    		}
    		else
    		{
    			k.sendMessage(sender,"Accée refusé , veuillez vous authentifier !");
    		}
     
    	}
    }

  5. #25
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut
    merci ca fonctionne impec
    si non comment faire pour faire l'inverse ?
    je vais faire une fonction de-auth , mais je sait pas comment enlevé un champ de l'ArrayList

  6. #26
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Je voudrais faire une précision, il n'est pas recommandé (cf normes de codage sun par exmple) de faire de imports du syle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import java.toto.dibule.*;
    pas parceque ça surcharge le code ou que ça inclu des choses inutiles, puisque dans tout les cas c'est un chemin qui est inclus, mais plutôt par soucis de lisibilité.

    On préférera donc toujours:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import java.toto.dibule.SpaceCowboy*;
    à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import java.toto.dibule.*;
    A+

  7. #27
    Membre éclairé Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Par défaut
    pour retirer un element d'une array list tu fais comme ca.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    users.remove("leLoginAEnlever")

  8. #28
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par thibaut
    plutôt par soucis de lisibilité.
    Tu noteras que c'est encore une de leurs propres regles qu'il ne suivent pas (cf leur code source - et ce n'est pas la seule regle de ce genre). Le point de vue de la lisibilite est tangent ... une liste de 3km de long non-triee n'est pas lisible tout simplement et la trier et la modifier pour suivre l'evolution du code (ajout/retrait de classes utilisees) prend du temps (et nuit donc a la maintenance). D'ou comme je l'ai indique : tu es libre de faire ce que tu veux sur ce sujet sans restriction (en suivant les regles de programmation de la ou tu bosses).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  9. #29
    Membre chevronné
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Par défaut
    Concernant la question des imports... je préfère la notation "non étoilée", car il s'agit d'un moyen relativement rapide de jeter un oeil à ce qui est utilisé dans une classe.

    Les IDE modernes trient très bien cette liste à la demande, avec suppresion des classes inutilisées avec un simple raccourci clavier. Lorsqu'elle s'allonge trop, c'est peut-être qu'il faut arrêter de taper du code et revoir les diagrammes de classe...

    Mais il vrai que sous des éditeurs un peu plus passifs (genre notepad), le développeur gagnera un peu de temps en important (p.ex.) un javax.swing.* plutôt que de se taper un nouvel import à la main pour chaque nouveau composant utilisé.

  10. #30
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Edit : fausse manip, à supprimer

  11. #31
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Et, de la meme maniere, les IDE modernes sont capables, quand il y a trop d'imports fait a partir du meme package de les simplifier en une seule ligne, ce reduit la taille du fichier de code source et le rend plus concis. De meme un IDE moderne est capable de remonter au code d'une classe ou d'afficher son package lorsque le nom court est utilise au lieu du nom long.
    Evidement il reste toujours la troisieme solution d'ecrire a chaque fois le nom long dans le code, evidement tout le monde (moi y-compris) s'ecrira que c'est stupide et une perte de temps (hors besoin de resoudre des conflits de nom courts), mais il se trouve que c'est encore plus lisible que les deux autres (mais c'est celle qui rallonge plus le code).
    Alors de meme...

    Donc, au lieu de continuer cet echange de ping-pong ou il semble visiblement que les deux cotes ont raison, l'important est de retenir comme cela a ete indique precedement que tu peux faire comme bon te semble (faut lire un peu) quand tu codes seul et que tu dois suivre les regles de codages de ton service/entreprise quand c'est pour le boulot. Les raisons initiales invoquee pour se restreindre a ce niveau etant non-valides car inspiree d'un mecanisme propre a un autre language (le C).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  12. #32
    Membre chevronné
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Par défaut
    Citation Envoyé par bouye
    Donc, au lieu de continuer cet echange de ping-pong ou il semble visiblement que les deux cotes ont raison
    +1

    A+

Discussions similaires

  1. probleme avec ArrayList
    Par Bigoodheart dans le forum Collection et Stream
    Réponses: 15
    Dernier message: 22/03/2010, 13h30
  2. Probleme affichage arraylist dans jtable
    Par brew94 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 19/12/2008, 13h31
  3. probleme avec ArrayList
    Par guitariste dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 02/05/2008, 23h00
  4. probleme classe arraylist
    Par elfia dans le forum C#
    Réponses: 4
    Dernier message: 07/03/2008, 15h47
  5. Probleme avec ArrayList
    Par AoSiX dans le forum C#
    Réponses: 10
    Dernier message: 30/01/2008, 22h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo