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

Java Discussion :

les boucles for en java


Sujet :

Java

  1. #1
    Membre confirmé Avatar de blackhock
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 75
    Par défaut les boucles for en java
    Bonjour à tous, je viens vous voir pour un petit souci mais qui me bloque énormément :
    J’ai deux tableaux de strings qui ne sont pas égaux, je veux récupérer les chaînes de caractères qui existe dans un tableaux mais pas dans l’autre (la différence entre les deux), voici mon 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
     
    public class Test {
     
    	private String[] toto = { "a", "b", "c", "d" };
    	private String[] titi = { "a", "b", "c" };
     
    	public String test() {
     
    		for (int i = 0; i < toto.length; i++) {
    			for (int j = 0; j < titi.length; j++) {
    				if (!toto[i].equals(titi[j])) {
    				System.out.println("\""
    						+ toto[i]
    						+ " \""
    							+ " est la seule chaîne de caractères qui ne fait pas parti de titi");
    				}
    			}
    		}
    		return null;
     
    	}
     
    	public String[] getToto() {
    		return toto;
    	}
     
    	public String[] getTiti() {
    		return titi;
    	}
    }
    Je veux récupérer le string ‘’d’’ mais à la compilation j’ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    "a " est la seule chaîne de caractères qui ne fait pas parti de titi
    "a " est la seule chaîne de caractères qui ne fait pas parti de titi
    "b " est la seule chaîne de caractères qui ne fait pas parti de titi
    "b " est la seule chaîne de caractères qui ne fait pas parti de titi
    "c " est la seule chaîne de caractères qui ne fait pas parti de titi
    "c " est la seule chaîne de caractères qui ne fait pas parti de titi
    "d " est la seule chaîne de caractères qui ne fait pas parti de titi
    "d " est la seule chaîne de caractères qui ne fait pas parti de titi
    "d " est la seule chaîne de caractères qui ne fait pas parti de titi
    Pourriez-vous m’aider svp merci

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Et avec un débugueur tu ne vois rien ?

    En tous les cas, je pense que il se passe la chose suivante :
    • première chaine examinée de toto est a
    • comparée à la premiere chaine de titi qui est a ; c'est égal, donc on passe à la suivante de titi
    • comparée à la deuxième chaîne de titi qui est b : c'est pas égal, donc on considère que a est une chaîne unique


    Donc c'est pas bon

  3. #3
    Membre confirmé Avatar de blackhock
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 75
    Par défaut
    Tout a fait je suis d'accord, j'ai compris le fonctionnement mais comment je peux faire pour récupérer ma chaine de caractères que je veux, je sais que c'est un problème d'indentation des boucles mais comment faire?
    Merci à tous

  4. #4
    Membre confirmé Avatar de arnaud036
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 201
    Par défaut
    Voici un exemple que j'ai fais:

    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
    public static void main(String[] args) {
     
    		String[] toto = { "a", "b", "c", "d", "e"};
    		String[] titi = { "a", "b", "c" };
     
    		for (int i = 0; i < toto.length; i++) {
    			if(Arrays.binarySearch(titi, toto[i]) >= 0){
    				continue;
    			}
    			else System.out.println("\""
    					+ toto[i]
    							+ " \""
    							+ " est la seule chaîne de caractères qui ne fait pas parti de titi");
    			}
    	}
    maintenant que je t'ai donnée les basses adapte le pour le faire sur les deux tableaux et ensuite supprimée les doublons

    Si tu as des problèmes n'hésite pas !

  5. #5
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Pourquoi des tableaux et non pas des listes ?

    La méthodes "contains()" de ces dernières faciliterait grandement ton travail.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  6. #6
    Membre confirmé Avatar de blackhock
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 75
    Par défaut
    Merci pour toutes vos réponses, mais quand je change l'ordre dans mes tableaux j'obtiens pas le résultat souhaité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	public static void main(String[] args) {
     
    		String[] toto = { "a", "b", "c", "d", "e" };
    		String[] titi = { "c", "a", "b" };
     
    		for (int p = 0; p < toto.length; p++) {
    			if (Arrays.binarySearch(titi, toto[p]) >= 0) {
    				continue;
    			} else
    				System.out.println("\"" + toto[p] + " \"");
    		}
    	}
    et j'obtiens Je ne sais pas trop pourquoi...?, encore merci
    Cordialement

  7. #7
    Membre éprouvé Avatar de jean.2edi
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 106
    Par défaut
    1. Que tes tableaux soient triés ou non change beaucoup ton algorithme !
    2. Pourquoi coder ce que d'autres ont déjà fait :
      • Tu peux mettre ta première liste dans une Map puis chercher chaque élément de la seconde.
      • Tu peux utiliser des bibliothèques existante comme Apache Commons Collections, voici ta liste en une seule ligne de code:
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Collection r = CollectionUtils.subtract(Arrays.asList(toto), Arrays.asList(titi));

  8. #8
    Membre confirmé Avatar de blackhock
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 75
    Par défaut
    Bonjour à tous et merci pour toutes vos réponses,
    J’ai essayé d’utiliser les collections ou bien les listes malheureusement je n’arrive pas, j’ai un message d’erreur sur CollectionUtils. Je ne sais pas trop pourquoi ?? je rappelle que mes tableaux ne sont pas triés et que je veux bosser avec des listes si ça facilite les choses.
    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
     
    	public static void main(String[] args) {
     
    		String[] toto = { "a", "b", "c", "d", "e" };
    		String[] titi = { "c", "a", "b" };
     
    		/** ****** */
    		Collection r = CollectionUtils.subtract(Arrays.asList(toto), Arrays.asList(titi));
    		/** ****** */
    		List<String> List1 = Arrays.asList(toto);
    		List<String> List2 = Arrays.asList(titi);
    		for (String str2 : List2) {
    			for (String str1 : List1) {
    				if (List1.contains(List2)) {
    					System.out.println(str1);
    				} 
    			}
    		}
    	}
    Encore Merci à tous

  9. #9
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    salut,

    c'est pas optimisé du tout, mais ça devrait marcher:
    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
     
    public static void main(String[] args) {
     
        String[] toto = { "a", "b", "c", "d", "e" };
        String[] titi = { "c", "a", "b", "f" };
     
        // on cherche ce qu'il n'y a que dans toto
        for (int p = 0; p < toto.length; p++) {
            int q;	
            for (q = 0; q < titi.length; q++) {
                if (toto[p].equals(titi[q]))
                    break;
                    // doublon trouvé.
                    // on sort prématurément de la boucle ; q < titi.length
            }
            if (q== titi.length ) {
                // on a parcouru tout titi sans trouver toto[p]
                System.out.println("'" + toto[p] + "' n'existe que dans toto");
            }
        }
     
     
        // on cherche ce qu'il n'y a que dans titi
        for (int p = 0; p < titi.length; p++) {
            int q;
            for (q = 0; q < toto.length; q++) {
                if (titi[p].equals(toto[q]))
                    break;
                    // doublon trouvé.
                    // on sort prématurément de la boucle ; q < toto.length
            }
            if (q== toto.length) {
                // on a parcouru tout toto sans trouver titi[p]
                System.out.println("'" + titi[p] + "' n'existe que dans titi");
            }
        }
    }
    'd' n'existe que dans toto
    'e' n'existe que dans toto
    'f' n'existe que dans titi
    Après tout dépend de tes besoins:
    - si ta fonction est appelée 10 000 fois par seconde sur des listes de 50 000 entrées de 1000 caractères chacune, ça vaut le coup de se creuser la tête pour optimiser.
    - si ta fonction est appelée une fois tous les 34 du mois, pour 5 chaînes de 10 caractères, un algo basique comme celui ci-dessus sera largement suffisant.

  10. #10
    Membre confirmé Avatar de blackhock
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 75
    Par défaut
    Merci à tous pour votre aide, encore Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplacer les boucles for
    Par Lost in dans le forum Images
    Réponses: 7
    Dernier message: 19/07/2008, 16h36
  2. les boucles for..next
    Par dispa dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/06/2007, 14h23
  3. Réponses: 2
    Dernier message: 07/05/2007, 16h46
  4. Réponses: 3
    Dernier message: 20/09/2006, 22h35
  5. [VBS]Bug sur les boucles for.
    Par méphistopheles dans le forum VBScript
    Réponses: 7
    Dernier message: 24/03/2006, 22h17

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