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

avec Java Discussion :

Retourner deux valeurs?


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Retourner deux valeurs?
    Bonjour,

    Quelle est la meilleure pratique pour retourner deux valeurs?

    J'expose le problème :
    Dans le cadre d'un projet pour le CNAM, je dois développer un solveur de sudoku. Seulement j'arrive à un point bloquant. Je génère une grille complète, puis une grille de sudoku (donc incomplète), je vérifie qu'elle est non ambiguë (càd n'admettant qu'une solution) et si tel est le cas, je l'affiche.

    C'est là qu’apparaît mon problème : j'ai une grille finale plein et la grille à compléter. Existe-t-il une méthode propre, autre qu'un tableau, pour retourner les deux grilles, de façon à pouvoir proposer la grille et sa solution?

    Pour illustrer, j'ai une méthode qui ressemble à peu près à ça:
    if (solutionner(0, 0, 0, 0, matrice, 0, false, 1)) {
    } else {
    System.out.println("Aucune solution n'a été trouvée");
    }

    solution = deep_copy(matrice);

    grille_sudoku = sudoku(matrice);

    grille_valide = deep_copy(grille_sudoku);

    if (solutionner(0, 0, 0, 0, grille_sudoku, 0, false, 2)) {
    } else {
    System.out.println("Aucune solution n'a été trouvée");
    }

    identique = compare(grille_sudoku, solution);

    if (identique == true) {
    matrix = grille_valide;
    } else {
    matrix = sudoker(matrix); //récursion
    }

    return (matrix);
    A ce stade, je me pose une double question : celle du return (renvoyer un tableau avec grille_valide et solution) et celle de la structure même de ma méthode dans laquelle seule une deep_copy me permet de conserver une grille dans son état initial. J'ai l'impression que résoudre la question du return revient à résoudre celle de la deep_copy.

    PS: Si je résous deux fois la grille, c'est pour éliminer les grilles ambiguës. Une coup je résous en incrémentant depuis 1, un coup je résous en partant de 9. Ainsi, si les deux approches donnent le même résultat c'est qu'il n'y a qu'une solution possible.

    PS 2: Cela me laisse l'impression floue d'un gros résidu d'approche procédurale de la programmation...

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Personellement, je travaillerais comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public class Grille {
     // Ta grille de soduku
    }
    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
     
    public class Solver {
      // responsable de trouver les solutions
      Grille[] solutions;
      public Solver(Grille grilleAResoudre){
        this.grille = grilleAResoudre;
        // calculer les solutions 
        solutions = ....;
      }
      public Grille[] getSolution(){
        // retourne les solutions possible
      }
      public Grille getGrille(){
        // la grille de base
      }
      pulic boolean isAmbiguous(){
         return getSolutions().length<2;
      }
      pulic boolean isSolvable(){
         return getSolutions().length>0;
      }
    }
    Pour la partie récursive, si ton algorithme nécessite pour bien fonctionner de réceptionner en retour de récursion plusieurs grille, il est inévitable que tu devra les mettres soit dans un tableau, soit dans un objet dédié à ce stockage. Si on parle de récursion dans des méthodes privées, les deux options se valent. Si on parle de méthodes publique (la récursion est directement accessible, pas uniquement son résultat), alors faudra passer par un objet pour rester propre vis à vis de l'appelant.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Oh ok, merci.

    Juste pour lever un doute. Pour le getter, il doit bien contenir quelque chose du genre "return solutions;"? Je dois juste m'assurer avant d'avoir fait appel à Solver, c'est bien ça? En le disant, il me semble manquer quelque chose du genre "this.solutions = solution" dans le Solver... Ou pas?.

    Je vais approfondir ma réflexion et faire des tests, mais c'est juste pour m'assurer de ne pas partir sur une fausse piste.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    j'ai juste mis la structure hein, à toi de la remplir avec ton code C'est juste pour expliquer le principe ^^

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Bon, si déjà ma remarque ne fait pas hurler c'est déjà que je ne dois pas faire complètement fausse route Mais comme on dit, maintenant, yapluka

    Merci.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/01/2014, 13h33
  2. [XL-2007] Fonction qui retourne deux valeurs
    Par Bonero dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/10/2013, 18h46
  3. Pour retourner deux valeurs dans une fonction
    Par IMANE21 dans le forum Débuter
    Réponses: 1
    Dernier message: 04/03/2012, 00h36
  4. [XL-2007] Fonction retournant deux valeurs
    Par locosr dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/05/2011, 21h11
  5. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 17h37

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