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. #1
    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 [débutant] nextCellToUpdate aide merci
    Salut tout le monde, voila je suis vraiment un gros débutant en java alors merci de me donner un petit coup de main...

    Voila en faite jai un tableau à deux dimensions de 9 sur 9 remplis avec des nombres de 1 à 9 (comme le sudoku) et des 0 pour les champs à trouver. Ensuite je créé un nouveau tableau identhique au premier pour avoir une copie conforme de ma "grille" de base. Bon ensuite vient le problème. Je suis en train de faire la méthode générique pour compléter les champs du tableau en fonction des règles du sudoku et j'ai besoin de savoir quelle est ma prochaine case éditable ! Par exemple les trois premier trous sont remplit et il me faut savoir le 4ieme ! comme pourrais-je faire pour que ma methode me revoie la prochaine case éditable ??? voici ce que j'ai pour le moment:

    mon tableau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private int[][] sudoGrid = { 
    			{ 0, 0, 0, 0, 9, 0, 0, 8 ,0 },
    			{ 7, 0, 0, 6, 0, 0, 4, 0, 0 },
    			{ 0, 8, 0, 0, 5, 4, 9, 3, 7 },
    			{ 3, 4, 8, 0, 0, 6, 0, 0, 2 },
    			{ 1, 0, 0, 0, 0, 0, 0, 0, 4 },
    			{ 2, 0, 0, 5, 0, 0, 6, 1, 8 },
    			{ 9, 7, 5, 1, 6, 0, 0, 4, 0 },
    			{ 0, 0, 3, 0, 0, 8, 0, 0, 1 },
    			{ 0, 1, 0, 0, 3, 0, 0, 0, 0 }
    	};
    ensuite ma méthode qui duplique le tableau d'origine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public int copieGridBase(){
    		for(int i = 0; i < 9; i++){
    			for(int j = 0; j < 9; j++){
    				sudoGridCopie[i][j] = sudoGrid[i][j];
    			}
    		}
    		return 0;
    	}
    ensuite voici la méthode que jaimerai réussir a faire :
    J'ai déja poser sa comme sa...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public String getNextCellToUpdate(int line, int col){
    		String NextCell = "";
     
    		return NextCell;
    	}
    merci de me donner un coup de main !
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

  2. #2
    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
    Idée :

    Tu fais un parcour de sudoGrid[line][col] à sudoGrid[line][8] pour voir si tu trouves un 0.
    Si tu n'en trouves pas, tu fais un parcours de sudoGrid[line+1][0] à sudoGrid[line+1][8], et ainsi de suite.

    Bien sûr, oublie pas de vérifier que line+1 existe . Et à la place de mettre "8" mets une constante indiquant la taille de ton tableau, comme ça tu pourras faire des sudoku de différentes tailles .

  3. #3
    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
    [MODE HS]
    cyrill
    Membre émérite
    je suis vraiment un gros débutant
    [/MODE HS]

    lol

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 101
    Points : 127
    Points
    127
    Par défaut
    je ne comprends pas pourquoi tu dois retourner une String ? il y a quoi dans cette String pour représenter la case ? ces coordonnées ? parce que son contenu sera toujours 0.

  5. #5
    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
    Citation Envoyé par schniouf
    [MODE HS]


    [/MODE HS]

    lol
    merci pour ton idée mais cest un peu plus compliquer quand meme... lol je post souvent en php cest pour sa !
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

  6. #6
    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
    Citation Envoyé par smallet
    je ne comprends pas pourquoi tu dois retourner une String ? il y a quoi dans cette String pour représenter la case ? ces coordonnées ? parce que son contenu sera toujours 0.
    oui il faudrai que sa me renvoie les coordonnées de la position true;
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

  7. #7
    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
    je ne comprends pas vraiment ce que tu entends par case "éditable". Comment les reconnais tu ?

    ce sont les cases qui valent 0 ?

    quand tu parles de méthode générique pour remplir les champs, tu réalise un parcours de tes cases ? genre ligne par ligne ?

    Donc, si je comprends bien tu es à un endroit du tableau et tu cherches à trouver la prochaine case qui vaut zéro. Donc ta méthode devrait te renvoyer des Coordonnées (ou un simple int[][] )

    Si c'est bien ça le truc, tu peux essayer un truc du genre (à améliorer bien sûr ):
    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
     
    /**
     * @param line Current line
     * @param col Current column
     * @return The position x,y of the next cell
     
    public int[][] getNextCellToUpdate(int line, int col){
      
    for(int i = line; i<sudoGrid.length; i++){
         for(int j=col, j<sudoGrid[i].length; j++){
              if(sudoGrig[i][j] == 0)
                  return new int[i][j];
         }
    }
     
    return null;
    }
    return NextCell; }


    [EDIT] oulà le temps que je tape ça, la discussion a bien avancé ...
    "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/

  8. #8
    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
    oui les cases éditable sont celles qui valent 0 !

    je vous met toute ma class comme sa si qqun est motiv a chercher il a tout ! lol

    voila la class algorithme.java

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    package sudoku;
    public class Algorithme {
     
    	//déclaration de la grille de sudoku
    	int[][] sudoGridCopie = new int[9][9]; 
    	private int[][] sudoGrid = { 
    			{ 0, 0, 0, 0, 9, 0, 0, 8 ,0 },
    			{ 7, 0, 0, 6, 0, 0, 4, 0, 0 },
    			{ 0, 8, 0, 0, 5, 4, 9, 3, 7 },
    			{ 3, 4, 8, 0, 0, 6, 0, 0, 2 },
    			{ 1, 0, 0, 0, 0, 0, 0, 0, 4 },
    			{ 2, 0, 0, 5, 0, 0, 6, 1, 8 },
    			{ 9, 7, 5, 1, 6, 0, 0, 4, 0 },
    			{ 0, 0, 3, 0, 0, 8, 0, 0, 1 },
    			{ 0, 1, 0, 0, 3, 0, 0, 0, 0 }
    	};
     
     
    	//constructeur
    	public Algorithme() {
    		// TODO Auto-generated constructor stub
    	}
     
    	//méthode pour dupliquer la grille de base
    	public int copieGridBase(){
    		for(int i = 0; i < 9; i++){
    			for(int j = 0; j < 9; j++){
    				sudoGridCopie[i][j] = sudoGrid[i][j];
    			}
    		}
    		return 0;
    	}//fin de la méthode copieGridBase()
     
    	//méthode pour checker les lignes
    	public boolean testLine(int[] line){
    		for(int i = 0; i < line.length; i++){
    			for(int j = 0; j < line.length; j++){
    				if(line[i] == line[j] && i!=j && line[i]!=0){
    					return false;
    				}
    			}
    		}
    	return true;
    	}//fin de la methode testLine()
     
    	//Méthode pour checker les colones
    	public boolean testCol(int colToCheck){
    		for(int col = 0; col < 9; col++){
    			int i = 0;
    			for(i = i+col; i < 9; i++){
    				if(sudoGrid[i][colToCheck] == sudoGrid[col][colToCheck] && i != col && sudoGrid[col][colToCheck] != 0){
    					return false;
    				}
    			}
    		}
    		return true;
    	}//fin de la méthode testCol
     
     
    	public int[] test3x3(int col, int line){
     
    		int lineMin, lineMax, colMin, colMax;
    		colMin = (col/3)*3;
    		colMax = colMin+2;
    		lineMin = (line/3)*3;
    		lineMax = lineMin+2;
    		int tabFor3x3[] = new int[9];
     
    		for(int i = lineMin; i <= lineMax; i++){
    			for(int j = colMin; j <= colMax; j++){
    				for(int x = 0; x < 9; x++){
    					tabFor3x3[x] = sudoGrid[lineMin+(x/3)][colMin+(x%3)];
    				}				
    			}
    		}
    		return tabFor3x3;
    	}
     
    	//methode pour retourner true ou false en fonction du resultat des autres méthodes
    	public boolean testGrid(int row, int col){
    		return testCol(col) && testLine(sudoGrid[row]) && testLine(test3x3(col, row));
    	}
     
    	//methode pour envoyer toutes  les col et line de la grille 
    	//à la methode pour tester toutes les methode et return un boolean final
    	public boolean testGridFinal(){
    		for(int i = 0; i < 9; i++){
    			for(int j = 0; j < 9; j++){
    				if(!testGrid(i, j)){
    					return false;
    				}
    			}
    		}
    		return true;
    	}
     
    	public String getNextCellToUpdate(int line, int col){
    		String NextCell = "";
     
    		return NextCell;
    	}
     
    	public String getPreviousCellToUpdate(int line, int col){
     
    		return "";
    	}
     
    //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
     
    	//sert a définir quels sont les champs de départ qui sont updatable
    	public boolean canUpdate(int line, int col, int value){
    		if(sudoGrid[line][col] == 0 && value <= 9 && value > 0){
    			return true;
    		}else{
    			return false;
    		}
    	}
     
    	public int showTab(){
    		for(int i = 0; i < 9; i++){
    			System.out.println(" ");
    			for(int j = 0; j < 9; j++){
    				System.out.print(sudoGrid[i][j]+" ");
    			}
    		}
    		return 0;
    	}
     
    	public static void main(String[] args) {
    		Algorithme algo = new Algorithme();//instance de la classe Algorithme
    		algo.copieGridBase();
    		//System.out.println(algo.completGrid());
    		//System.out.println(algo.showTab());
    		//System.out.println("the result of the final test is : "+algo.testGridFinal());
    		System.out.println(algo.getNextCellToUpdate(5, 2));
    	}//fin du main
     
    }//fin de la class Alorithme
    voila ! n'oubliez pas que je suis un n00b en java lol merci
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

  9. #9
    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
    je comprends pas, pourrais tu décrire le fonctionnement souhaité pour la méthode getNextCellToUpdate.

    Que sont pour toi les arguments (la case courante ?)
    "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/

  10. #10
    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
    alors il faut surtout regarder la méthode suivante :

    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
    //méthode pour compléter la grille de Sudoku
    	public int completGrid(){
     
    		int row = 0;
    		int col = 0;
     
    		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
    il faut imaginer que par exemple je suis a la position sudoGrid[2][3] et jaimerai savoir quelle est la prochaine case editable en avançant dans le tableau. si on regarde mon tableau la prochaine éditable est la position sudoGrid[4][3] évidemment.

    Alors voila comment faire pour que ma methode me renvoie cette derniere position en fonction des parametre (row = 2 et col = 3) ???

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

  11. #11
    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
    elle doit renvoyer [3][3] plutot non ?

    Si oui, la méthode que je t'ai mise fait ça. J'ai simplement inversé lignes et colonnes par contre ...

    mais ça doit marcher dans le principe ...

    ça ne convient pas ?
    "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/

  12. #12
    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
    oui [3][3] excuse moi !

    ben dans le principe oui mais comme je suis vraiment pas fort en java je peine lol
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

  13. #13
    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
    ben pour le moment sa ne fonctionne pas ...

    tu pourrai me réecrire la méthode pour que je soit sur que cest pas moi qui est délirer... lol
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

  14. #14
    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 schniouf
    Idée :
    Tu fais un parcour de sudoGrid[line][col] à sudoGrid[line][8] pour voir si tu trouves un 0.
    Si tu n'en trouves pas, tu fais un parcours de sudoGrid[line+1][0] à sudoGrid[line+1][8], et ainsi de suite
    Je vois pas en quoi ma méthode ne marche pas...

    Citation Envoyé par in
    public int[][] getNextCellToUpdate(int line, int col){

    for(int i = line; i<sudoGrid.length; i++){
    for(int j=col, j<sudoGrid[i].length; j++){
    if(sudoGrig[i][j] == 0)
    return new int[i][j];
    }
    }

    return null;
    }
    Non, car tu ne reviens jamais à j=0, c'est à dire au début d'une ligne ! Tu explores chaque ligne à partir de son col ième élément.

  15. #15
    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
    Citation Envoyé par schniouf
    Je vois pas en quoi ma méthode ne marche pas...



    Non, car tu ne reviens jamais à j=0, c'est à dire au début d'une ligne ! Tu explores chaque ligne à partir de son col ième élément.
    tu lecrirai comment ta méthode ???
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

  16. #16
    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
    Voilà ma solution (et ne me dites pas que ça marche 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
    public int[][] getNextCellToUpdate(int line, int col)
    {
     
    // Parcours de la ligne courante
    for(int j=col+1 ; j<sudoGrid[line].length ; j++){
       if(sudoGrig[line][j] == 0)
          return new int[line][j];
    }
     
    // 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;
    }
    EDIT - Il suffisait de demander

  17. #17
    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
    Citation Envoyé par schniouf
    Non, car tu ne reviens jamais à j=0, c'est à dire au début d'une ligne ! Tu explores chaque ligne à partir de son col ième élément.
    effectivement !


    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
    /**
     * @param line Current line
     * @param col Current column
     * @return The position x,y of the next cell
    */
     
    public int[][] getNextCellToUpdate(int line, int col){
     
    for(int i = line; i<sudoGrid.length; i++){
         for(int j=col, j<sudoGrid[i].length; j++){
              if(sudoGrig[i][j] == 0)
                  return new int[i][j];
         }
         col = 0; // et hop ...
    }
     
    return null;
    }
    "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/

  18. #18
    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 in
    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
    /**
     * @param line Current line
     * @param col Current column
     * @return The position x,y of the next cell
    */
     
    public int[][] getNextCellToUpdate(int line, int col){
     
    for(int i = line; i<sudoGrid.length; i++){
         for(int j=col, j<sudoGrid[i].length; j++){
              if(sudoGrig[i][j] == 0)
                  return new int[i][j];
         }
         col = 0; // et hop ...
    }
     
    return null;
    }
    Très bonne optimisation, j'y avais pas pensé !

    [MODE CHIANT]
    Ca fait gagner quelques ligne mais je sais pas si ça fait gagner du temps... vu que ça te coute une affectation (col=0) pour chaque ligne du tableau parcourue. Imagine que ton tableau fasse 10 millions de lignes, tu perds 1 seconde !
    [/MODE CHIANT]

  19. #19
    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
    la méthode de in fais exactement la meme chose ??? je ne comprend pas bien le but de cette optimisation...
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

  20. #20
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par cyrill
    la méthode de in fais exactement la meme chose ??? je ne comprend pas bien le but de cette optimisation...
    Non pas tout à fait, le code de in parcourait chaque ligne, mais seulement depuis la colonne ou tu étais actuellement ainsi, tu ne passais par dessus toutes les colonnes plus à gauche de l'actuelle.

    Exemple, si tu demande la case suivante de (1,5), il va regarder toutes les lignes, mais seulement depuis la colonne 5. C'est ce que schniouf a corrigé dans son code

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

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

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