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 :

[débutant] nextCellToUpdate aide merci


Sujet :

Langage Java

  1. #21
    Membre confirmé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Points : 493
    Points
    493
    Par défaut
    merci batiste pour ton explication ! Donc maintenant si je veux faire la méthode getPreviousCellToUpdate qui doit me renvoyer la prochaine cellule modifiable se trouvant avant la cellule passée en paramètre, je dois faire sa comme sa ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Parcours des autres lignes
    for( int i=line-1 ; i<sudoGrid.length ; i++){
       for( int j=0 ; j<sudoGrid[i].length ; j++){
          if(sudoGrig[i][j] == 0)
             return new int[i][j];
       }
    }
    return null;
    }
    sa serai juste ?

    Sinon on ma dis qu'il existait une fonction (point point)(x,y) qui permettait de renvoyé deux valeur dans un int... est-ce que quelqu'un connais un peu ou a deja entendu parler de sa ?
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

  2. #22
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Non ce n'est pas ça, car là tu fais exactement la même chose qu'avec nextCell mais en partant d'une ligne avant.

    Pour previousCell, il faut faire comme nextCell mais à l'envers :
    - Sur la ligne courante, partir de la case précédente en remonter jusqu'à la première case.
    - Si on n'a pas trouvé de 0, on remonte à la ligne précédente et on parcoure la ligne de la dernière à la première case. Et ainsi de suite !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public Point getPreviousCellToUpdate(int line, int col){
     
    for( int i=line ; i<0 ; i-- ) {        // Parcours en reculant d'une ligne
         for( int j=col ; j<=0 ; j-- ) { // Parcours en reculant d'une case
              if(sudoGrig[i][j] == 0)
                  return new Point(i, j);
         }
         col = sudoGrid[i].length - 1 ; // On va à la fin de la ligne
    }
    return null ;
    }
    La classe Point de Java te permet de stocker les coordonnées x et y d'un... point !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Point p = new Point( 2, 4 ) ; // Point de coordonnées (2,4)
    int x = p.getX() // donne 2
    int y = p.getY() // donne 4
    Ici tu as juste à transformer x en i et y en j

  3. #23
    Membre confirmé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Points : 493
    Points
    493
    Par défaut
    hum ok merci beaucoup ! je pense que cest plus simple comme sa non ?
    Bon voici mes deux méthodes après modifications:

    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
    public Point getNextCellToUpdate(int line, int col){
    		for( int i=line+1 ; i<sudoGridCopie.length ; i++){
    		   for( int j=0 ; j<sudoGridCopie[i].length ; j++){
    		      if(sudoGridCopie[i][j] == 0)
    		      return new Point(i, j);
    		   }
    		}
    		return null;
    	}
     
    	public Point getPreviousCellToUpdate(int line, int col){
    		for( int i=line ; i<0 ; i-- ) {       
    		     for( int j=col ; j<=0 ; j-- ) {
    		          if(sudoGrid[i][j] == 0)
    		              return new Point(i, j);
    		     }
    		     col = sudoGrid[i].length - 1 ; // On va à la fin de la ligne
    		}
    		return null ;
    		}
    elles sont exacte pour toi ? parce que sa ne me renvoie par les bon coordonnée. par exemple si le lui donne x=0 et y=0 par rapport a ma grille sa devrai me retourner x=0,y=1 mais sa me retourne x=1,y=1 ....
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

  4. #24
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    nextCell est fausse, tu oublies de parcourir le restant de la ligne courante !
    Et erreur de ma part, je me suis trompé dans previousCell... en effet, il faut revenir à la fin de la ligne précédente si elle existe ! Mais bien sûr, c'est sous entendu que tes lignes n'ont pas toutes la même longueur... alors à toi de voir si tu laisses la modif ou pas.

    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
    public Point getNextCellToUpdate(int line, int col)
    {  
    for( int i=line ; i<sudoGridCopie.length ; i++){  
       for( int j=col ; j<sudoGridCopie[i].length ; j++){  
          if(sudoGridCopie[i][j] == 0)  
             return new Point(i, j); 
       }
       col = 0 ; // On revient au début de la ligne 
    }  
    return null; 
    }  
    
    public Point getPreviousCellToUpdate(int line, int col)
    {  
    for( int i=line ; i>=0 ; i-- ) { 
       for( int j=col ; j>=0 ; j-- ) {  
          if(sudoGrid[i][j] == 0)  
             return new Point(i, j); 
       }  
       if( i > 0 )         // Modif : si on n'est pas sur la 1ere ligne
          col = sudoGrid[i-1].length - 1 ; // On va à la fin de la ligne précédente
    } 
    return null ; 
    }

  5. #25
    Membre confirmé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Points : 493
    Points
    493
    Par défaut
    hum je vois sa ! bon sa a l'air de bien fonctionner pour le moment ! voici le teste que j'ai fais avec la grille que j'ai montrée en haut :

    passage des paramètre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    System.out.println("Next Cell is : "+algo.getNextCellToUpdate(2, 5));
    System.out.println("Previous Cell is : "+algo.getPreviousCellToUpdate(2, 5));
    la case 2,5 est un bon exemple je trouve car le next nest pas sur la meme ligne et le previous oui.

    il me renvoie sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Next Cell to Update is : java.awt.Point[x=3,y=3]
    Previous Cell to Update is : java.awt.Point[x=2,y=3]
    donc c'est juste si je ne me trompe pas non ?

    Maintenant j'ai réfléchie et il ne me semble pas qu'il y a beaucoup d'exeption ou je me trompe ? mes méthode test deja tout non ?
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

  6. #26
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Ouais c'est juste. Mais fait d'autres tests sur d'autres cases :
    • Des tests "standards" : quelques cases au milieu du tableau
    • Des tests "critiques" : 1ère case de la 1ère ligne, dernière case de la dernière ligne, case avec pas de previousCell ni de nextCell, etc...

    Si tout ça fonctionne alors ça devrait aller. Mais un plantage dû à une situation spéciale peut toujours arriver.

    Il n'y a pas d'exceptions dans le code. Par contre, à toi de bien gérer les cas où les fonctions renvoient null (quand il n'y a pas de previousCell ou de nextCell) !

  7. #27
    Membre confirmé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Points : 493
    Points
    493
    Par défaut
    ok je vais essayer de faire sa ! Je te redis le résultat des tests lorsque je les aurait fait !

    merci
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

  8. #28
    Membre confirmé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Points : 493
    Points
    493
    Par défaut
    bon tous les test passent parfaitement ! Maintenant j'ai surement besoin de votre aide pour la méthode qui servira à compléter la grille ! J'ai deja développer cette derniere comme suivant.

    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
    	//méthode pour compléter la grille de Sudoku
    	public int completGrid(){
    		int row = 0;
    		int col = -1;
     
    		while(row < 9){//tan que row est plus petit que 9
    			if(sudoGrid[row][col] == 9){//si la position est égale a 9
    				sudoGrid[row][col] = 0;//on remet la case à 0
    				getPreviousCellToUpdate(row, col);//on prend la précédente case updatable
    			}else{//sinon
    				sudoGrid[row][col] += 1;//on ajoute 1 au nombre acutel
    				if(testGrid(row, col)){//si le test de la grille passe
    					getNextCellToUpdate(row, col);//on prend la prochaine case updatable
    				}else{//sinon
    					break;
    				}//fin du second if
    			}//fin du if
    		}//fin du while
     
    		return 0;
    	}//fin de la méthode comletGrid
    voila ! cest fort possible qu'il y a encore une faute ! jai aussi penser de mettre col à -1 au début car si la case 0.0 est remplis sa posera problème à mon avis. donc j'aimagine qu'il faut que j'appel ma méthode getNextCellToUpdate avant mon while non ?

    en faite mon soucis (de n00b) est de savoir si j'utilise correctement mes méthode Next et Previous ... je sens qu'il a une petite faute mais je ne sais pas ou... enfin je pense qu'il faut prendre y et x de la class Point et les associé a row et col mais je ne sias pas vraiment comment... avec getY et getX ?
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

  9. #29
    Membre confirmé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Points : 493
    Points
    493
    Par défaut
    voici ma méthode maintenant !

    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
    public int completGrid(){
    		int row = 0;
    		int col = 0;
    		row = (int) getNextCellToUpdate(row, col).getX();
    		col = (int) getNextCellToUpdate(row, col).getY();
    		while(row < 9){//tan que row est plus petit que 9
    			if(sudoGrid[row][col] == 9){//si la position est égale a 9
    				sudoGrid[row][col] = 0;//on remet la case à 0
    				row = (int) getPreviousCellToUpdate(row, col).getX();//on prend la précédente case updatable
    				col = (int) getPreviousCellToUpdate(row, col).getY();
    			}else{//sinon
    				sudoGrid[row][col] += 1;//on ajoute 1 au nombre acutel
    				if(testGrid(row, col)){//si le test de la grille passe
    					row = (int) getNextCellToUpdate(row, col).getX();//on prend la prochaine case updatable
    					col = (int) getNextCellToUpdate(row, col).getY();
    				}else{//sinon
    					break;
    				}//fin du second if
    			}//fin du if
    		}//fin du while
     
    		return 0;
    	}//fin de la méthode comletGrid
    je ne sais pas si mes getY et getX sont juste mais mis a part sa jai un soucis de boucle... voila lors de mon second if, lorsque la condition est fausse donc cette partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(testGrid(row, col)){//si le test de la grille passe
    					row = (int) getNextCellToUpdate(row, col).getX();//on prend la prochaine case updatable
    					col = (int) getNextCellToUpdate(row, col).getY();
    				}else{//sinon
    					break;
    				}//fin du second if
    et bien si je regarde bien mon GNS (qui est juste normalement) je devrai revenir a la boucle while... comment faire sa ? merci
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

  10. #30
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    [EDIT] INUTILE. Problème du proxy, post en retard, et voilà un message inutile ....

    [EDIT 2] Si en fait les trucs en gras peuvent être utilse ...



    bon je comprends pas trop ce que tu veux faire. Toi tu sais ce que tu veux exactement pour cette méthode ?

    déjà tes méthodes getNext... et getPrevious... te renvoient un point(x,y) mais tu ne t'en sers pas à ce que je vois ...

    ensuite, je trouve que ta manière de parcourir ton tableau est bizarre ... j'arriva pas à comprendre ce que tu cherches à faire ...


    Alors bon je tente un truc et tu me dis si c'ets qqchose du genre que tu cherches à faire ...

    Au fait tu devrais peut etre passer un Point en paramètre des 2 méthodes précédentes ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Point current = new Point(0,0);
    Point fin = new Point(9,9);
    while (!current.equals(fin){   // tant qu'on a pas parcouru tout le tableau
                                           // mais c'est pas top, à changer
    current = getNextCellToUpdate(current); // première case à éditer
    edit(current); // je suppose que tu as une méthode qui tente de déterminer la valeur. Attention au null
     
    // a voir la condition pour revenir en arrière, en fonction de edit() ??
    if(revenirEnArriere)
        current = getPreviousCellToUpdate(current);
    else
        current = getNextCellToUpdate(current);
     
    }

    bon je sais c'est crado mais c'est pour savoir si c'est à un truc du style que tu pense ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  11. #31
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Ton problème de boucle vient du fait que tu n'as jamais row == 9, donc tu sors jamais du while... Il faut tester s'il existe encore une case à remplir !

    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
    public int completGrid(){  
       int row = 0; 
       int col = 0; 
       Point current = getNextCellToUpdate(row, col) ;
     
      while( current != null ) //tant qu'il existe une case à tester 
      {
        row = (int) current.getX(); 
        col = (int) current.getY(); 
     
         if(sudoGrid[row][col] == 9)//si la position est égale a 9  
         {
            sudoGrid[row][col] = 0;//on remet la case à 0  
            current = getPreviousCellToUpdate(row, col) ;       
         } 
         else //sinon  
         {
     
               sudoGrid[row][col] += 1;//on ajoute 1 au nombre actuel
               if(testGrid(row, col)) //si le test de la grille passe  
               {
                  current= getNextCellToUpdate(row, col) ;//on prend la prochaine case updatable  
               }else{//sinon 
                   break; 
               }//fin du second if  
     
         }//fin du if  
     
       }//fin du while  
     
       return 0; 
     
    }//fin de la méthode comletGrid
    Mais si tu veux mon avis, ça marchera jamais ! getPreviousCellToUpdate(row, col) te renvoie la dernière case avant la case courante contenant 0, c'est ça ? Il n'y en a pas, vu que tu as rempli toutes les cases précédentes avec un chiffre en faisant sudoGrid[row][col] += 1 juste avant de faire nextCell().

    Tu devrais plutôt t'orienter vers une fonction récursive, quitte à la "dérécursiviser" après pour gagner en performance.

  12. #32
    Membre confirmé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Points : 493
    Points
    493
    Par défaut
    Re tout le monde !

    voila jai fâit un peu comment je pensait et jai réussi ! etant donnée une grille de sudoku, on en sort la solution.
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

  13. #33
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Citation Envoyé par cyrill
    Re tout le monde !

    voila jai fâit un peu comment je pensait et jai réussi ! etant donnée une grille de sudoku, on en sort la solution.
    Super !

    Oublie pas le tag

  14. #34
    Membre confirmé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Points : 493
    Points
    493
    Par défaut
    ouais ! merci pour ton aide !
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Débutant recherche aide
    Par Flyingdutchman dans le forum OpenGL
    Réponses: 3
    Dernier message: 07/03/2006, 12h36
  2. Besoin d'aide ! Merci.
    Par les.coms dans le forum Langage
    Réponses: 3
    Dernier message: 18/01/2006, 00h35
  3. débutante demande aide
    Par youna dans le forum Langage
    Réponses: 1
    Dernier message: 04/10/2005, 12h30
  4. débutant : besoin aide
    Par simon76 dans le forum Flash
    Réponses: 6
    Dernier message: 14/08/2003, 17h03

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