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 :

Jeu de sudoku : problème dans mes classes Case Placement


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Jeu de sudoku : problème dans mes classes Case Placement
    Bonjour,
    J'ai le même probleme a résoudre que dans cette discussion avec les même contrainte, j'ai 2 questions :
    - la class Placement permet de garder via une listeArray l'historique des placements et valeurs ,pourquoi avoir une class Case d'après vous ? Est ce pour avoir une historique par rapport a la cellule sans ?

    Pour Case j'ai trouvé cela mais je ne comprends pas la variable sqr et son calcul : this.sqr=(c/board.K)+board.K*(r/board.K);

    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
    public class Cell {
    	final public int col,row,sqr;
     
    	private int value;
    	private Board board;
     
    	public Cell(Board board,int r, int c, int v) {
    		this.board=board;
    		this.col=c; this.row=r;
    		this.sqr=(c/board.K)+board.K*(r/board.K);
    		this.setValue(v);
    	}
     
    	public boolean setNextPossibleValue() {
    		int currentvalue=this.value;
     
    		// unset current value (if any)
    		this.unsetValue();
     
    		// find and set the next value
    		for(int v=currentvalue+1;v<=board.N;v++) {
    			if (board.isLocked(this, v)) continue;
    			this.setValue(v);
    			return true;
    		}
     
    		return false;
    	}
     
    	public void setValue(int v) {
    		this.value=v;
    		board.setLock(this,true);
    	}
     
    	public void unsetValue() {
    		board.setLock(this,false);
    		this.value=0;
    	}
     
    	public int getValue() {
    		return this.value;
    	}
     
    }

    Merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Pour comprendre la formule, il faudrait qu'on sache ce que représente cette variable K (dont le nom est plutôt sybillin !). Il est probable qu'il s'agisse de déterminer dans quelle sous partie du plateau se trouve la case (un plateau du sudoku de 9x9 est souvent divisé en 9 blocs de 3x3).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Problème Initiale :
    Problématique
    Vous poursuivez le mandat qui vous a été confié par la directrice de l’école Saint Pruneau, soit la conception d’un jeu de Sudoku. Dans ce mandat particulier, vous aurez à concevoir les classes associées au jeu de Sudoku et les méthodes qui s’y réfèrent, permettant d’accéder aux données de la grille, la manipulation de la grille et la validation d’une solution. Le fichier/classe tp2.java permettant de démarrer le logiciel devra se nommer tp4.java.

    Dans le cadre de ce travail pratique, vous aurez en prendre un certain nombre de décision dans la conception des classes, soit : Quelles méthodes doivent être abstraite ou non? À quel niveau doit se situer l’implémentation finale du code? Quel type de polymorphisme doit être utilisé? Veuillez utiliser les commentaires dans le code, pour justifier vos choix de conception pour chaque méthode créée !

    1-Créer des classes
    Le programme devra être développé autour de plusieurs classes soit :

    1-tn4.java permettant de démarrer le programme. Cette classe aura une méthode main qui devra faire comme actions :
    1 - Créer une instance de la classe Sudoku9x9;
    2 - Imprimer la grille de Sudoku original;
    3 - Imprimer le degré de difficulté de la grille;
    4 - Effectuer 10 placements;
    5 - Imprimer la grille de Sudoku suite aux placements;
    6 - Annuler 2 placements;
    7 - Imprimer la grille de Sudoku suite à l’annulation;
    18 - Valider la solution et imprimer le résultat de la validation.

    1-Sudoku.java, une classe abstraite représentant la notion abstraite de grille de Sudoku et des méthodes communes à tous les sous-types de grille de Sudoku. Elle aura donc comme attribut :
    1 - Une matrice de nombre entier (int[][]) représentant la grille de Sudoku
    2 - Une liste d’action de placement (Une ArrayList de classe Placement (voir plus bas))
    3 - Le degré de complexité de la grille (int)
    4 - L’attribut placement (int) indiquant le nombre de chiffre restant à placer dans la grille

    Elle aura comme méthodes abstraites ou non :

    1 - Initialiser une grille
    2 - Réinitialiser la grille (revenir à la grille de Sudoku originale) à l’aide de la liste de placements effectués. Vous devez concevoir la solution par vous-même!
    3 - Tester la validité de la solution (voir code en annexe)
    4 - Faire un placement (voir plus bas au point 5)
    5 - Annuler un placement (voir plus bas au point 5)
    6 - Méthodes get et set pour accéder aux attributs de classes (attention à la visibilité des méthodes, c.a.d. public, private, protected).
    7 - Imprimer la grille

    1- Sudoku9x9.java, une sous-classe de Sudoku.java qui implémente les méthodes spécifiques à un Sudoku9x9, soit :
    1 - Les sous-implémentations des méthodes abstraites de la classe Sudoku.java
    2 - Toutes autres méthodes nécessaires pour effectuer le mandat

    2- Case.java, une classe représentant une case de la grille. Cette classe sera utilisée par la méthode placement et annuler placement afin de garder un trace des actions sur la grille de jeu. À vous de déterminer quels sont ces attributs et méthodes pour répondre aux besoins de la problématique. À vous également de spécifier sa visibilité et de la justifier.

    1-Créer des appels de méthodes
    Au travers de votre conception orientée-objet, répondant à la problématique, les différentes instances de classes auront à interagir entre elles. Elles s’échangeront des appels de méthodes permettant de répondre aux besoins du mandat, soit (rappel du comportement de la classe tn4.java) :

    1 - Créer une instance de la classe Sudoku9x9;
    2 - Imprimer la grille de Sudoku original;
    3 - Imprimer le degré de difficulté de la grille;
    4 - Effectuer 10 placements;
    5 - Imprimer la grille de Sudoku suite aux placements;
    6 - Annuler 2 placements;
    7 - Imprimer la grille de Sudoku suite à l’annulation;
    8 - Valider la solution et imprimer le résultat de la validation.

    1-Faire et annuler des placements
    Grâce à la classe Case, il est possible de sauvegarder une trace des actions du joueur sur la grille. À l’aide de la méthode, fairePlacement, vous aurez à (1) effectuer le placement sur la grille; (2) sauvegarder le placement (c’est à dire l’instance de la classe Case) dans un structure de type ArrayList..

    À l’aide de la méthode annulerPlacement, vous aurez à (1) récupérer la dernière instance dans l’arraylist (en utilisant la méthode remove et la méthode size pour connaître le nombre d’élément) et (2) annuler le placement dans la grille.

    Pour plus d’information sur les ArrayList, aller à la page : http://docs.oracle.com/javase/7/docs...ArrayList.html (en anglais seulement).


    1-Code de validation de la grille Sudoku
    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
    public boolean validate() {
    // un tableau : int[][] board = new int[9][9]();
    // initialisation et actions sur le Sudoku
     
    //Vérifie les lignes et les colonnes 
    for (int i = 0; i < board.length; i++) {
    BitSet bsRow = new BitSet(9);
    BitSet bsColumn = new BitSet(9);
    for (int j = 0; j < board[i].length; j++) {
    if (board[i][j] == 0 || board[j][i] == 0) continue;
    if (bsRow.get(board[i][j] - 1) || bsColumn.get(board[j][i] - 1))
    return false;
    else {
    bsRow.set(board[i][j] - 1);
    bsColumn.set(board[j][i] - 1);
    }
    }
    }
     
      //Vérifie les quandrans (3x3)
    for (int rowOffset = 0; rowOffset < 9; rowOffset += 3) {
    for (int columnOffset = 0; columnOffset < 9; columnOffset += 3) {
    BitSet threeByThree = new BitSet(9);
    for (int i = rowOffset; i < rowOffset + 3; i++) {
    for (int j = columnOffset; j < columnOffset + 3; j++) {
    if (board[i][j] == 0) continue;
    if (threeByThree.get(board[i][j] - 1))
    return false;
    else
    threeByThree.set(board[i][j] - 1);
    }
    }  
    }
    }
    return true;
    }

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Suite..
    La grille est Sudoku9x9.
    Je ne vois pas l'utilité d'une classe Case et d'une classe Placement sauf si cela est pour un historique des placements et des valeurs.

    Merci

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    L'exercice demande de faire une classe Case : son utilité est déjà de répondre à la question. Ensuite, le sujet précise dans le paragraphe "Faire et annuler des placements", à quoi va servir cette classe Case.

    Par contre, le sujet ne parle pas de classe Placement.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Merci oui tout a fait d'accord pas de Class Placement ....
    Par contre je ne comprend pas pourquoi on fait un grille de int et non une grille de Case

    L'énoncé par de : Une matrice de nombre entier (int[][]) représentant la grille de Sudoku
    int grille[][];

    serait il possible de faire une grille de Case ?
    Case grille[][];


    Une liste d’action de placement : Une ArrayList de classe Placement (voir plus bas))
    J'ai testé un peu les ArrayList...
    List<String> al = new ArrayList<String>();
    Et je ne vois pas encore qu'elle type mettre ou mettre une structure class dedans

    List<Placement> al = new ArrayList<Placement>();
    ou de Case ??


    4 - L’attribut placement (int) indiquant le nombre de chiffre restant à placer dans la grille
    En fait c'est juste le nombre de 0 dans la grille ??


    Merci

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par zapmtl Voir le message
    Merci oui tout a fait d'accord pas de Class Placement ....
    Par contre je ne comprend pas pourquoi on fait un grille de int et non une grille de Case

    L'énoncé par de : Une matrice de nombre entier (int[][]) représentant la grille de Sudoku
    int grille[][];

    serait il possible de faire une grille de Case ?
    Case grille[][];
    Dans le cas général il est possible de faire les 2. Je n'ai pas lu en détail tout le sujet, mais je pense que l'idée c'est d'avoir une grille de chiffre pour représenter la grille cible (le problème résolu) et que la classe Case serve pendant le jeu.

    On peut représenter la grille de jeu (en cours) par un tableau de int, mais ça oblige à référencer les cases vides par 0, ce qui est une forme d'astuce, qu'on peut vouloir éviter par rigueur. Dans ce cas, la classe Case pourrait se contenter de n'avoir que les méthodes, mais elle perd son utilité effectivement.

    Citation Envoyé par zapmtl Voir le message
    Une liste d’action de placement : Une ArrayList de classe Placement (voir plus bas))
    J'ai testé un peu les ArrayList...
    List<String> al = new ArrayList<String>();
    Et je ne vois pas encore qu'elle type mettre ou mettre une structure class dedans

    List<Placement> al = new ArrayList<Placement>();
    ou de Case ??
    La question a se poser est qu'est-ce qu'un placement ? Un position dans la grille (ligne,colonne) et une valeur placée. Dans ce cadre la classe Case a aussi ces informations. En a-t-elle d'autres ? Si oui, on pourrait imaginer une classe Placement qui n'a que (ligne,colonne) et valeur, et une classe Case qui étend la classe Placement.

    Toutefois, le but étant d'annuler les placements, et, comme il est possible de placer un chiffre dans une case non vide (contenant déjà un placement précédent), il faut en tenir compte. On peut stocker dans la classe Case la liste des placements de cette case, auquel cas, on peut connaitre la valeur remplacée le cas échéant, puisque c'est l'élément précédent dans la liste, mais dans ce cas, il est inutile de stocker les coordonnées, puisque la case les connait déjà. D'un autre côté, avec ce système, on a l'historique case par case, mais pas globale, ce qui empêche de faire une fonction "annuler" globale.

    La solution pour moi, sans regarder en détail le sujet et ce qui est vraiment demandé, serait d'avoir une liste globale des cases jouées, et pour chaque case, une liste des valeurs jouées. Ainsi, on peut annuler un coup.

    Citation Envoyé par zapmtl Voir le message
    4 - L’attribut placement (int) indiquant le nombre de chiffre restant à placer dans la grille
    En fait c'est juste le nombre de 0 dans la grille ??
    Je n'ai pas vu où on parlait de cet attribut.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup

    Je trouve cela très embrouiller car dans la Classe Sudoku9x9 on nous parle de placements puis dans la Classe Sudoku aussi.

    Ce que je pense comprendre est que Sudoku9x9 gère une grille de 9 x 9 et Sudoku gére une multiple de grille 9x9.

    Exemple une grille de 18 par 18 utilise 4 Sudoku9x9.
    Quand on créer un placement cela peu s'écrire du style :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sudoku SudokuB = new  Sudoku(2);   
    ..
    SudokuB.Placement(2,3,2);   // Place 2 dans la 3ieme ligne et 4ieme colonne
    SudokuB.Placement(12,11,5);   // Place 5 dans la 13ieme ligne et 12ieme colonne
    Je ne vois pas comment la class Sudoku va gere les multiples Sudoku9x9.

    Je ne sais pas si je complique trop les choses et que cela est plus simple que je ne le pense.

    Merci

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    De ce que je comprends :

    La classe Sudoku est la représentation d'une grille de sudoku : elle va avoir tous les attributs et comportement nécessaires à jouer dans une grille de sudoku, de taille quelconque (un paramètre) (effectivement, en lisant le sujet dans le détail, j'ai vu la variable placement dont tu parlais précédemment : et oui, il s'agit de stocker le nombre de cases encore vides, et la classe Placement dont tu parlais, dont je suppose qu'elle désigne donc une position et une valeur placée, et la valeur remplacée, donc).

    La classe Sudoku9x9 est juste le cas particulier d'une grille 9x9.

    La classe Sudoku est une abstraction et ne sera pas instanciable. La classe Sudoku étend la classe Sudoku dont elle est une implémentation spécifique (concrète).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Merci,

    Je vais essayer de faire des choses puis je me permettre de les poster ici si j'ai des questions ?

    Sudoku9x9 est une extension de Sudoku qui elle est abstraite.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sudoku9x9 jeu1 = new Sudoku9x9("Joueur1",9,10,1);
     
    abstract class Sudoku{
    ...
     }
     
     
    public abstract class Sudoku9x9 extends Sudoku{
    ...
     
    }

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Sudoku est abstraite, mais pas Sudoku9x9. Il doit y avoir un paramètre pour la taille, qui peut être passé par le constructeur.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public abstract class Sudoku {
    	protected final int[][] grille;
     
    	public Sudoku(int taille) {
    		this.grille=new int[taille][taille];
    	}

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Sudoku9x9 extends Sudoku {
     
       public Sudoku9x9() {
          super(9); 
       }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Merci, en relisant une nieme fois j'ai lu ceci :

    Sudoku.java, une classe abstraite représentant la notion abstraite de grille de Sudoku et des méthodes communes à tous les sous-types de grille de Sudoku. Elle aura donc comme attribut :
    1 - Une matrice de nombre entier (int[][]) représentant la grille de Sudoku
    2- Une liste d’action de placement (Une ArrayList de classe Placement (voir plus bas))
    3 - Le degré de complexité de la grille (int)
    4 - L’attribut placement (int) indiquant le nombre de chiffre restant à placer dans la grille
    Donc je vais rajouter une classe Placement.

    Donc il y a bien une classe Placement, pas facile comme TP4, quand les TP d'avant était des questions tout simple de recopie etc...

    Merci beaucoup de votre aide.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    J'ai des problème avec super qui me renvoi toujours une erreur :
    error: call to super must be first statement in constructor

    Je comprend que super dans ton exemple est pour initialiser la classe parent mais cela ne fonctionne pas.

    Merci

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Je n'ai pas compris le problème avec le Super, je suis reparti d'un exemple avec les animaux ... Chien etc et cela refonctionne.

    J'ai fait la class Placement mais ne je comprend pas pourquoi il nous demande une class Case :

    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
    class Placement {
        private int value = 0;
        private int x = 0;
        private int y = 0;
        private int nouvelleValeur = 0;
        private int ancienneValeur = 0;
        //private Case uneCase;
     
        public Placement(int x, int y, int ancienneValeur,int nouvelleValeur) {
            this.x = x;
            this.y = y;
            this.ancienneValeur = ancienneValeur;
            this.nouvelleValeur = nouvelleValeur;
     
        }
     
        public int getX() {
            return this.x;
        }
     
        public int getY() {
            return this.y;
        }
     
        public int getancienneValue() {
            return this.ancienneValeur;
        }
     
        public int getnouvelleValeur() {
            return this.nouvelleValeur;
        }
     
     
    }
    J'ai mes fonctions de gestion des placements qui fonctionnent :


    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 void CreerPlacement(int x, int y,int valeur)
         {
                Placement deplocal=new Placement(x,y,this.grille[x][y],valeur);
     
                this.ListPlacements.add(deplocal);
                this.grille[x][y]=valeur;
         }
     
     
         public void AnnulerPlacement()
         {
            Placement deplocal=(Placement)this.ListPlacements.get(this.ListPlacements.size()-1);  
            int x = deplocal.getX();
            int y = deplocal.getY();
            int anicenneValeur = deplocal.getancienneValue();
            this.grille[x][y]=anicenneValeur;
     
            this.ListPlacements.remove(this.ListPlacements.size()-1);
         }
    Pourquoi il faudrait une class Case ...

    Merci

  15. #15
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    error: call to super must be first statement in constructor
    Le message me semble clair, non ? L'appel de super doit toujours être la première instruction du constructeur.

    Citation Envoyé par zapmtl Voir le message
    Pourquoi il faudrait une class Case ...
    Parce que c'est demandé ici :
    Citation Envoyé par zapmtl Voir le message
    2- Case.java, une classe représentant une case de la grille. Cette classe sera utilisée par la méthode placement et annuler placement afin de garder un trace des actions sur la grille de jeu. À vous de déterminer quels sont ces attributs et méthodes pour répondre aux besoins de la problématique. À vous également de spécifier sa visibilité et de la justifier.
    Maintenant, c'est vrai que quand on lit ça :
    Citation Envoyé par zapmtl Voir le message
    1-Sudoku.java, une classe abstraite représentant la notion abstraite de grille de Sudoku et des méthodes communes à tous les sous-types de grille de Sudoku. Elle aura donc comme attribut :
    1 - Une matrice de nombre entier (int[][]) représentant la grille de Sudoku
    2 - [highlight]Une liste d’action de placement (Une ArrayList de classe Placement (voir plus bas))[/hightlight]
    3 - Le degré de complexité de la grille (int)
    4 - L’attribut placement (int) indiquant le nombre de chiffre restant à placer dans la grille
    on ne sait plus si la classe doit s'appeler Placement ou Case... a mon avis, il y a une erreur dans ce sujet, ou quelque chose qui manque dans la demande... comme le fait que la classe Placement contient une instance de Case...

    Note par ailleurs qu'il y a des conventions en Java et qu'un nom de méthode doit toujours commencer par une minuscule (d'ailleurs ton sujet te demande de faire des méthodes fairePlacement() et annulerPlacement()).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2012
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Merci,

    Je vais essayer de voir ce que je peux mettre dans la Classe Case que je n'ai pas besoin.

    Il y a une chose que je ne sais pas ... peut on changer une valeur de la grille initiale, je ne pense pas mais je ne vois pas encore comment faire qu'une cellule ne soit pas modifiable...

    Merci pour la remarque sur les noms de méthodes.

Discussions similaires

  1. [numpy] problème dans mes imports
    Par Kuroro dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 28/05/2007, 23h07
  2. [débutant]remarques dans mes class
    Par pingoui dans le forum Langage
    Réponses: 4
    Dernier message: 17/02/2007, 20h26
  3. problème dans mes études
    Par étudiant en galère.. dans le forum Etudes
    Réponses: 6
    Dernier message: 29/10/2006, 13h33
  4. Problème dans une Classe
    Par Orbix dans le forum Langage
    Réponses: 8
    Dernier message: 02/10/2006, 14h52
  5. [DAO] Comment gérer les liens avec la bdd dans mes classes?
    Par Wormus dans le forum Autres
    Réponses: 6
    Dernier message: 22/02/2006, 16h14

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