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

Langage Java Discussion :

Remplacer des boucles imbriquées par un code plus efficace


Sujet :

Langage Java

  1. #1
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut Remplacer des boucles imbriquées par un code plus efficace
    Bonjour,

    Voilà en gros 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
    for (x = 0; x < 12; x++) {
     
        if (boule[x] == null) {
     
            Objet boule[x] = new Objet();
        }
     
        for (y = 0; y < 12; y++) {
     
            // Là je récupère en gros les Shape de boule[x] et boule[y]
            collideBoules = shapeBouleX.intersects(shapeBouleY);
        }
    }
    Mon problème est la présence de toutes ces imbrications de for().

    Est-ce possible de faire par exemple une classe en static qui s'occuperait toute seul de comparer les intersections ?

    Je souhaiterais surtout supprimer la deuxième boucles for().

    Merci d'avance pour votre aide.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  2. #2
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for (x = 0; x < 12; x++) {
     
        if (boule[x] == null) {
     
            Objet boule[x] = new Objet();
        }
     
        for (y = 0; y < 12; y++) {
     
            // Là je récupère en gros les Shape de boule[x] et boule[y]
            collideBoules = shapeBouleX.intersects(shapeBouleY);
        }
    }
    Je n'ai rien compris, désolé

    Pourquoi ça t’embête tant que ça d'avoir 2 boucles imbriquées ?

  3. #3
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut
    Le problème est que je n'ai pas seulement 2 boucles imbriquées, je dois en avoir 10 ou 12 et j'ai peur que ça ralentisse la machine.
    Et puis je me demandais si c'était une façon normale d'arranger sont code. Il y a peut être plus simple non ?
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  4. #4
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Si le traitement impose d'avoir 10 ou 12 boucles, eh bien soit, ça ne ralentira la machine que si tu fais des grosses opérations à répétition (dans ce cas là oui il faut commencer à réfléchir à comment optimiser).

    Après non avoir 10 boucles imbriquées dans une même fonction c'est pas très propre, tu peux toujours découper tes traitements en fonctions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while(-)
    {
      traitement 1
      while(-)
      {
         // traitement 2
         while(-)
         {
            // traitement 3
         }
      }
    }
    Peut s'écrire
    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
    while(-)
    {
      traitement 1
       fonctionTraitement2(param1);
    }
     
    fonctionTraitement2(param1)
    {
      while(-)
      {
         // traitement 2
         fonctionTraitement3(param2);
      }
    }
     
    fonctionTraitement3(param2)
    {
      while(-)
      {
         // traitement 3
      }
    }
    Mais c'est un exemple, ça ne sert à rien de tout découper si ça n'a pas de réelle signification.

    A mon sens, un code "bien écrit" est un code qui doit être compris par le développeur qui va peut-être passer après moi (même si bien sûr il faut respecter les conventions de nommage, indentation, etc..).

    Si on arrive à suivre ta logique au travers des 10 boucles, eh bien soit (même si j'en doute un peu ). Par contre découper ton code dans tous les sens n'a pas beaucoup d’intérêt si ça devient un jeu de piste pour suivre ton code.

    En espérant avoir été clair

    Cdt.

  5. #5
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut
    Oui très clair, merci.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  6. #6
    Membre averti Avatar de toutgrego
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2013
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2013
    Messages : 217
    Points : 350
    Points
    350
    Par défaut
    Pour moi tu peux avoir 10/12 if imbriqués mais avoir 10/12 while/for imbriqués c'est qu'il y a un gros problème d'algorithme x)
    F*ck it ! Do it !

  7. #7
    Membre confirmé

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Points : 452
    Points
    452
    Par défaut
    Bonjour,

    "Comment bien coder?", vaste question... Une façon de s'en approcher peut être de mettre en place des outils qui vont "mesurer" la qualité du code produit (non, "compiler n'est pas gagner" ) : checkstyle, PMD par exemple. Monter le tout dans un sonar / sonarQube pour avoir une interface agréable des problèmes potentiels n'est pas qu'un plus, cela devrait, de mon point de vue, être un incontournable pour tout dev java se voulant professionnel. Le temps investi à outiller le projet est largement récompensé par le gain de qualité et l'aide à la montée en compétence des développeurs qui vont y découvrir que tout un tas de comportements qu'ils utilisent régulièrement sont déconseillés voir carrément à proscrire. De plus la note de mesure de la qualité est très stimulante, les collègues se challengeant amicalement entre eux pour améliorer cette note et avoir le projet le "mieux" codé.

    @toutgrego, avoir 10 ou 12 if imbriqués est plutôt déconseillé, cela fait monter la complexité cyclomatique : http://fr.wikipedia.org/wiki/Nombre_cyclomatique

    My two cents...
    Signature à venir...
    Ancienne : Divers NTIC (PHP, Dojo, à venir...) : http://tif44.fr/blog/

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

Discussions similaires

  1. Remplacer plein de ligne IF par un code plus simple
    Par Liloo14 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/12/2012, 23h04
  2. Générer des diagrammes UML par le code Java
    Par ancrou dans le forum NetBeans
    Réponses: 3
    Dernier message: 03/12/2007, 10h17
  3. Réponses: 1
    Dernier message: 17/11/2007, 13h42
  4. problème de syntaxe dans des boucles imbriquées
    Par deglingo37 dans le forum Access
    Réponses: 2
    Dernier message: 01/09/2006, 14h46
  5. [XSLT ]remplacement d un caractere par son code
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 02/09/2005, 16h26

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