Squashed commit of the following:
commit41f1be6be7Author: ROGER <gwendal.roger@etu.univ-lyon1.fr> Date: Tue Feb 4 16:18:24 2025 +0100 04/02/2025 : Ajout de Console.errorln pour les remontée d'erreurs commitef3506c4ebAuthor: ROGER <gwendal.roger@etu.univ-lyon1.fr> Date: Tue Feb 4 16:07:59 2025 +0100 04/02/2025 : Ajout de la JavaDoc commitf57aa34d36Author: Morph01 <thibaut6969delastreet@gmail.com> Date: Mon Feb 3 11:37:12 2025 +0100 Squashed commit of the following: commit 60c1634e1a159bf992b2ed1cdff632490294c48b Author: Morph01 <thibaut6969delastreet@gmail.com> Date: Mon Feb 3 11:36:25 2025 +0100 fix: remove .idea et .vscode
This commit is contained in:
@@ -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());
|
||||
|
||||
|
||||
@@ -2,30 +2,72 @@ package sudoku;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Bloc {
|
||||
private final List<Case> 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<Case> 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]";
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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.</br>
|
||||
* Renvoie 0 si au moins l'une des contraintes n'est pas respectée </br>
|
||||
* 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());
|
||||
|
||||
@@ -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.</br>
|
||||
* Renvoie 0 si au moins l'une des contraintes n'est pas respectée</br>
|
||||
* 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();
|
||||
|
||||
@@ -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.</br>
|
||||
* Renvoie 0 si au moins l'une des contraintes n'est pas respectée</br>
|
||||
* 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();
|
||||
|
||||
@@ -17,6 +17,11 @@ public class Grille {
|
||||
private Multidoku multidoku; // Référence à Multidoku
|
||||
private List<String> 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<Symbole> getSymbolesPossibles() {
|
||||
return symbolesPossibles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Méthode permettant d'ajouter un symbole à la liste des symboles possibles
|
||||
* @param symbolesPossibles
|
||||
*/
|
||||
public void setSymbolesPossibles(ArrayList<Symbole> 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();
|
||||
|
||||
@@ -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 :</br>
|
||||
* - S : Sudoku</br>
|
||||
* - 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;
|
||||
|
||||
@@ -14,6 +14,10 @@ public class Sudoku {
|
||||
private final List<Contrainte> 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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user