-
-
-
-
-
-
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index e0f15db..0000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "java.configuration.updateBuildConfiguration": "automatic"
-}
\ No newline at end of file
diff --git a/app/src/main/java/sudoku/App.java b/app/src/main/java/sudoku/App.java
index aead3f5..b28553a 100644
--- a/app/src/main/java/sudoku/App.java
+++ b/app/src/main/java/sudoku/App.java
@@ -5,6 +5,10 @@ public class App {
return "Hello World!";
}
+ /**
+ * Méthode main permettant de lancer l'application sudoku et d'afficher les erreurs s'il y en a.
+ * @param args
+ */
public static void main(String[] args) {
System.out.println(new App().getGreeting());
diff --git a/app/src/main/java/sudoku/Bloc.java b/app/src/main/java/sudoku/Bloc.java
index 55e2e43..fbb1dc7 100644
--- a/app/src/main/java/sudoku/Bloc.java
+++ b/app/src/main/java/sudoku/Bloc.java
@@ -2,30 +2,72 @@ package sudoku;
import java.util.ArrayList;
import java.util.List;
-
public class Bloc {
private final List cases;
private final String couleur;
private final int couleurIndex;
+ /**
+ * Constructeur permettant de créer un bloc de couleur
+ * @param couleur
+ * @param couleurIndex
+ */
public Bloc(String couleur, int couleurIndex) {
this.cases = new ArrayList<>();
this.couleur = couleur;
this.couleurIndex = couleurIndex;
}
+ /**
+ * Méthode permettant d'ajouter une case à un bloc
+ * @param c
+ */
public void ajouterCase(Case c) {
cases.add(c);
}
+ /**
+ * Méthode permettant de savoir si une case contient un symbole précis
+ * @param s
+ * @return
+ */
+ public boolean contains(Symbole s) {
+ for (Case c : cases) {
+ if (c.getSymbole().equals(s)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Méthode permettant de renvoyer la couleur d'un bloc
+ * @return
+ */
public String getCouleur() {
return couleur;
}
+ /**
+ * Méthode permettant de renvoyer l'index de couleur d'un bloc
+ * @return
+ */
+ public int getCouleurIndex() {
+ return couleurIndex;
+ }
+
+ /**
+ * Méthode permettant de renvoyer une liste de cases associée à un bloc
+ * @return
+ */
public List getCases() {
return cases;
}
+ /**
+ * Méthode permettant d'afficher un bloc complet avec les cases qui le compose
+ * @return
+ */
@Override
public String toString() {
return "Bloc [cases=" + cases + ", couleur=" + couleur + ", couleurIndex=" + couleurIndex + " \u001B[0m]";
diff --git a/app/src/main/java/sudoku/Case.java b/app/src/main/java/sudoku/Case.java
index a2bd8f1..9cb748a 100644
--- a/app/src/main/java/sudoku/Case.java
+++ b/app/src/main/java/sudoku/Case.java
@@ -5,28 +5,54 @@ public class Case {
private final int colonne;
private Symbole symbole;
+ /**
+ * Constructeur permettant de créer une case grace aux paramètres suivants :
+ * @param ligne
+ * @param colonne
+ * @param symbole
+ */
public Case(int ligne, int colonne, Symbole symbole) {
this.ligne = ligne;
this.colonne = colonne;
this.symbole = symbole;
}
+ /**
+ * Méthode permettant de renvoyer la coordonnée de la ligne qui compose la case
+ * @return
+ */
public int getLigne() {
return ligne;
}
+ /**
+ * Méthode permettant de renvoyer la coordonnée de la colonne qui compose la case
+ * @return
+ */
public int getColonne() {
return colonne;
}
+ /**
+ * Méthode permettant de renvoyer le symbole qui compose la case
+ * @return
+ */
public Symbole getSymbole() {
return symbole;
}
+ /**
+ * Méthode permettant de modifier le symbole qui compose la case
+ * @param symbole
+ */
public void setSymbole(Symbole symbole) {
this.symbole = symbole;
}
+ /**
+ * Méthode qui permet d'afficher le symbole de la case ou "-" si la case est vide
+ * @return
+ */
@Override
public String toString() {
return (symbole == null) ? "-" : symbole.toString();
diff --git a/app/src/main/java/sudoku/Contrainte.java b/app/src/main/java/sudoku/Contrainte.java
index 141263b..ba94908 100644
--- a/app/src/main/java/sudoku/Contrainte.java
+++ b/app/src/main/java/sudoku/Contrainte.java
@@ -1,5 +1,8 @@
package sudoku;
+/**
+ * Interface permettant d'évaluer toutes les contraintes et de retourner un boolean indiquant si elles ont étés respectées.
+ */
public interface Contrainte {
boolean estRespectee(Grille grille, Case c);
}
diff --git a/app/src/main/java/sudoku/ContrainteBloc.java b/app/src/main/java/sudoku/ContrainteBloc.java
index 5a1e3f3..e30e3ff 100644
--- a/app/src/main/java/sudoku/ContrainteBloc.java
+++ b/app/src/main/java/sudoku/ContrainteBloc.java
@@ -1,6 +1,14 @@
package sudoku;
public class ContrainteBloc implements Contrainte {
+ /**
+ * Méthode permettant de savoir si l'ensemble des contraintes concernant le bloc sont respectées.
+ * Renvoie 0 si au moins l'une des contraintes n'est pas respectée
+ * Renvoie 1 si toutes les contraintes sont respectées
+ * @param grille
+ * @param c
+ * @return
+ */
@Override
public boolean estRespectee(Grille grille, Case c) {
int blocSize = (int) Math.sqrt(grille.getTaille());
diff --git a/app/src/main/java/sudoku/ContrainteColonne.java b/app/src/main/java/sudoku/ContrainteColonne.java
index d7e1464..41dbc81 100644
--- a/app/src/main/java/sudoku/ContrainteColonne.java
+++ b/app/src/main/java/sudoku/ContrainteColonne.java
@@ -1,6 +1,14 @@
package sudoku;
public class ContrainteColonne implements Contrainte {
+ /**
+ * Méthode permettant de savoir si l'ensemble des contraintes concernant la colonne sont respectées.
+ * Renvoie 0 si au moins l'une des contraintes n'est pas respectée
+ * Renvoie 1 si toutes les contraintes sont respectées
+ * @param grille
+ * @param c
+ * @return
+ */
@Override
public boolean estRespectee(Grille grille, Case c) {
int colonne = c.getColonne();
diff --git a/app/src/main/java/sudoku/ContrainteLigne.java b/app/src/main/java/sudoku/ContrainteLigne.java
index 464da89..417bcf2 100644
--- a/app/src/main/java/sudoku/ContrainteLigne.java
+++ b/app/src/main/java/sudoku/ContrainteLigne.java
@@ -1,6 +1,14 @@
package sudoku;
public class ContrainteLigne implements Contrainte {
+ /**
+ * Méthode permettant de savoir si l'ensemble des contraintes concernant la ligne sont respectées.
+ * Renvoie 0 si au moins l'une des contraintes n'est pas respectée
+ * Renvoie 1 si toutes les contraintes sont respectées
+ * @param grille
+ * @param c
+ * @return
+ */
@Override
public boolean estRespectee(Grille grille, Case c) {
int ligne = c.getLigne();
diff --git a/app/src/main/java/sudoku/Grille.java b/app/src/main/java/sudoku/Grille.java
index 9c5545a..c488e49 100644
--- a/app/src/main/java/sudoku/Grille.java
+++ b/app/src/main/java/sudoku/Grille.java
@@ -17,6 +17,11 @@ public class Grille {
private Multidoku multidoku; // Référence à Multidoku
private List generatedColors;
+ /**
+ * Constructeur permettant d'initialiser une griller grace aux paramètres suivants :
+ * @param taille
+ * @param sudoku
+ */
public Grille(int taille, Sudoku sudoku) {
this.taille = taille;
this.cases = new Case[taille][taille];
@@ -79,6 +84,12 @@ public class Grille {
}
}
+ /**
+ * Méthode permettant de connaitre la valeur d'une case (symbole) grace aux paramètres suivants :
+ * @param ligne
+ * @param colonne
+ * @return
+ */
public Case getCase(int ligne, int colonne) {
return cases[ligne][colonne];
}
@@ -274,17 +285,29 @@ public class Grille {
}
} catch (Exception e) {
Console.errorln("Une erreur est survenue : " + e.getMessage());
+ Console.errorln("Une erreur est survenue : " + e.getMessage());
}
}
+ /**
+ * Méthode permettant de retourner la liste des symboles possible. Cela dépend de ce qu'a saisit l'utilisateur dans la méthode askSetSymbolesPossibles
+ * @return
+ */
public List getSymbolesPossibles() {
return symbolesPossibles;
}
+ /**
+ * Méthode permettant d'ajouter un symbole à la liste des symboles possibles
+ * @param symbolesPossibles
+ */
public void setSymbolesPossibles(ArrayList symbolesPossibles) {
this.symbolesPossibles = symbolesPossibles;
}
+ /**
+ * Méthode permettant d'afficher la liste des symboles possibles
+ */
public void printSymbolesPossibles() {
StringBuilder sb = new StringBuilder();
for (Symbole symbole : symbolesPossibles) {
@@ -293,6 +316,10 @@ public class Grille {
System.out.println(sb);
}
+ /**
+ * Méthode permettant de retourner la taille de la grille
+ * @return
+ */
public int getTaille() {
return taille;
}
@@ -334,6 +361,10 @@ public class Grille {
return true;
}
+ /**
+ * Méthode permettant de retourner la longueure du symbole le plus long pour dimensionner corectement les cases et la grille
+ * @return
+ */
public int getLongueurSymboleLePlusLong() {
int max = 0;
for (Symbole symbole : symbolesPossibles) {
@@ -344,6 +375,10 @@ public class Grille {
return max;
}
+ /**
+ * Méthode permettant d'afficher la grille
+ * @return
+ */
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
diff --git a/app/src/main/java/sudoku/ResolveurBacktraceSimple.java b/app/src/main/java/sudoku/ResolveurBacktraceSimple.java
index 7f34a8c..8b56be5 100644
--- a/app/src/main/java/sudoku/ResolveurBacktraceSimple.java
+++ b/app/src/main/java/sudoku/ResolveurBacktraceSimple.java
@@ -6,6 +6,14 @@ import sudoku.core.Console;
public class ResolveurBacktraceSimple implements Resolveur {
+ /**
+ * Méthode permettant de résoudre un sudoku à partir des paramètres suivant :
+ * - S : Sudoku
+ * - afficherEtape : 0 ou 1
+ * @param s
+ * @param afficherEtape
+ * @return
+ */
@Override
public boolean resoudre(Sudoku s, boolean afficherEtape) {
EtatResolution etat = new EtatResolution(0, 0);
@@ -45,15 +53,27 @@ public class ResolveurBacktraceSimple implements Resolveur {
return true; // Si la grille est déjà résolue
}
+ /**
+ * Méthode permettant d'afficher le sudoku à chaque étape de sa résolution
+ * @param s
+ * @param compteur
+ * @param compteurGeneral
+ */
private void afficherEtapeResolution(Sudoku s, int compteur, int compteurGeneral) {
System.out.println("Sudoku, Etape " + compteur + " (Tentative " + compteurGeneral + ")");
System.out.println(s.getGrille().toString());
}
+
private static class EtatResolution {
int compteur;
int compteurGeneral;
+ /**
+ * Méthode permettant de fixer l'état de la résolution
+ * @param compteur
+ * @param compteurGeneral
+ */
EtatResolution(int compteur, int compteurGeneral) {
this.compteur = compteur;
this.compteurGeneral = compteurGeneral;
diff --git a/app/src/main/java/sudoku/Sudoku.java b/app/src/main/java/sudoku/Sudoku.java
index 5413e98..29784aa 100644
--- a/app/src/main/java/sudoku/Sudoku.java
+++ b/app/src/main/java/sudoku/Sudoku.java
@@ -14,6 +14,10 @@ public class Sudoku {
private final List contraintes;
private String nom;
+ /**
+ * Constructeur permettant d'initialiser un sudoku à partir de la taille de sa grille
+ * @param taille
+ */
public Sudoku(int taille) {
this.grille = new Grille(taille, this);
this.contraintes = new ArrayList<>();
@@ -56,6 +60,10 @@ public class Sudoku {
return grille.verifierToutesContraintes(contraintes);
}
+ /**
+ * Méthode permettant de retourner la grille complète
+ * @return
+ */
public Grille getGrille() {
return grille;
}
@@ -331,10 +339,10 @@ public class Sudoku {
try {
tailleGrille = Integer.parseInt(scanner.nextLine());
if (tailleGrille <= 0) {
- System.out.println("Erreur : Veuillez entrer un entier positif.");
+ Console.errorln("Erreur : Veuillez entrer un entier positif.");
}
} catch (NumberFormatException e) {
- System.out.println("Erreur : Entrée invalide. Veuillez entrer un nombre.");
+ Console.errorln("Erreur : Entrée invalide. Veuillez entrer un nombre.");
}
}
return tailleGrille;
@@ -400,14 +408,14 @@ public class Sudoku {
break; // Sortie de la boucle si l'utilisateur tape ESC
}
if (input.isEmpty()) {
- System.out.println("Veuillez entrer un numéro de ligne valide.");
+ Console.errorln("Veuillez entrer un numéro de ligne valide.");
continue; // Recommencer la saisie de la ligne si l'entrée est vide
}
try {
ligne = Integer.parseInt(input); // Convertir la ligne en entier
break; // Sortir de la boucle si la ligne est valide
} catch (NumberFormatException e) {
- System.out.println("Veuillez entrer un numéro de ligne valide (un nombre entier).");
+ Console.errorln("Veuillez entrer un numéro de ligne valide (un nombre entier).");
}
}
// ARRET DE LA BOUCLE SI SAISIE DE "ESC"
@@ -421,14 +429,14 @@ public class Sudoku {
System.out.println("Entrez le numéro de colonne :");
input = scanner.nextLine(); // Lire la colonne
if (input.isEmpty()) {
- System.out.println("Veuillez entrer un numéro de colonne valide.");
+ Console.errorln("Veuillez entrer un numéro de colonne valide.");
continue; // Recommencer la saisie de la colonne si l'entrée est vide
}
try {
colonne = Integer.parseInt(input); // Convertir la colonne en entier
break; // Sortir de la boucle si la colonne est valide
} catch (NumberFormatException e) {
- System.out.println("Veuillez entrer un numéro de colonne valide (un nombre entier).");
+ Console.errorln("Veuillez entrer un numéro de colonne valide (un nombre entier).");
}
}
@@ -438,7 +446,7 @@ public class Sudoku {
System.out.println("Entrez le symbole :");
symbole = scanner.nextLine(); // Lire le symbole
if (symbole.isEmpty()) {
- System.out.println("Veuillez entrer un symbole valide.");
+ Console.errorln("Veuillez entrer un symbole valide.");
continue; // Recommencer la saisie du symbole si l'entrée est vide
}
try {
@@ -501,7 +509,7 @@ public class Sudoku {
// Vérification des limites
if (choixLigne < 0 || choixLigne >= tailleGrille || choixColonne < 0
|| choixColonne >= tailleGrille) {
- System.out.println("Erreur : Coordonnées hors limites ! Veuillez réessayer.");
+ Console.errorln("Erreur : Coordonnées hors limites ! Veuillez réessayer.");
coordonneesValides = false;
continue;
}
@@ -509,7 +517,7 @@ public class Sudoku {
// Vérification si la coordonnée existe déjà dans TOUTE la grille
String coordonneeStr = choixLigne + "-" + choixColonne;
if (toutesLesCoordonnees.contains(coordonneeStr)) {
- System.out.println(
+ Console.errorln(
"Erreur : Ces coordonnées sont déjà utilisées dans un autre bloc ! Veuillez en entrer une nouvelle.");
coordonneesValides = false;
}
@@ -526,7 +534,7 @@ public class Sudoku {
sudoku.getGrille().creerBlocPersonnalise(listeCases);
System.out.println("Bloc " + nombreBloc + " enregistré avec succès !");
} catch (IllegalArgumentException e) {
- System.out.println("Erreur lors de la création du bloc : " + e.getMessage());
+ Console.errorln("Erreur lors de la création du bloc : " + e.getMessage());
System.out.println("Veuillez recommencer la saisie de ce bloc.");
continue; // Recommence le bloc en cours
}
diff --git a/app/src/main/java/sudoku/Symbole.java b/app/src/main/java/sudoku/Symbole.java
index 7dab4c6..26119ca 100644
--- a/app/src/main/java/sudoku/Symbole.java
+++ b/app/src/main/java/sudoku/Symbole.java
@@ -3,23 +3,46 @@ package sudoku;
public class Symbole {
private final String valeur;
+ /**
+ * Constructeur permettant de créer un symbole
+ * @param symbole
+ */
public Symbole(String symbole) {
this.valeur = symbole;
}
+ /**
+ * Méthode permettant de créer un symbole de type String
+ * @param s
+ * @return
+ */
// Factory methods pour différents types
public static Symbole of(String s) {
return new Symbole(s);
}
+ /**
+ * Méthode permettant de créer un symbole de type int
+ * @param n
+ * @return
+ */
public static Symbole of(int n) {
return new Symbole(String.valueOf(n));
}
+ /**
+ * Méthode permettant de créer un symbole de type char
+ * @param c
+ * @return
+ */
public static Symbole of(char c) {
return new Symbole(String.valueOf(c));
}
+ /**
+ * Méthode permettant de vérifier si un symbole est de type int
+ * @return
+ */
public boolean isInt() {
try {
Integer.parseInt(valeur);
@@ -29,15 +52,28 @@ public class Symbole {
}
}
+ /**
+ * Méthode permettant de vérifier si un symbole est de type letter (char)
+ * @return
+ */
public boolean isLetter() {
return valeur.length() == 1 && Character.isLetter(valeur.charAt(0));
}
+ /**
+ * Méthode permettant de vérifier si un symbole est de type string
+ * @return
+ */
@Override
public String toString() {
return valeur;
}
+ /**
+ * Méthode permettant de retourner un booléen si 2 objets sont identiques
+ * @param obj
+ * @return
+ */
@Override
public boolean equals(Object obj) {
if (this == obj)