cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020
-
4 mars 2009 à 18:48
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013
-
5 mars 2009 à 07:49
Bonjour a tous et merci a tout ceux qui auront le courage de lire ce message parce que le code va etre un peu long, je m'en excuse.
Voila, j'essaye de trier des cartes par un algorithme d'insertion, j'ai vérifié toutes mes fonctions de comparaison de cartes et elles ont l'air de fonctionner, je ne comprends vraiment pas ce qui se passe et, sans exegérer, je cherche une solurion depuis 15h30 ! ! c'est pourquoi je fais appel a vous...
Un paquet de cartes est un arraylist d'objets Carte.
On trie les cartes de la maniere suivante
d'abord par couleur puis par valeur, puis enfin par forme
je vous donne mon code
<hr size="2" width="100%" />
public enum Symbole {
maison,
ballon,
etoile,
fanion,
arbres;
public static int NBR_SYMBOLE=Symbole.values().length;
public static int getNBR_SYMBOLE() {
return NBR_SYMBOLE;
}
public static void setNBR_SYMBOLE(int nbr_symbole) {
NBR_SYMBOLE = nbr_symbole;
}
public String toString() {
int num=0;
String res="";
Symbole[] tableauSymbole=Symbole.values();
for(int i=0;i<NBR_SYMBOLE;i++){
if(this==tableauSymbole[i]){
num=i;
}
}
switch(num){
case 0: res+="maison";
break;
case 1: res+="ballon";
break;
case 2: res+="etoile";
break;
case 3: res+="fanion";
break;
case 4: res+="arbres";
break;
}
return res;
}
public boolean formeInferieure(Symbole forme2){
boolean inferieur;
inferieur=((this.toString()).compareTo(forme2.toString())<0);
return inferieur;
}
}
<hr size="2" width="100%" />public class Carte {
// ICI J'AI LE CONSTRUCTEUR, GETTER....
public boolean couleurInferieure(Color c1, Color c2){
boolean estInferieure=(toStringCouleur(c1).compareTo(toStringCouleur(c2))<0);
return estInferieure;
/**
* Cette fonction compare la carte courante a la carte en parametre
* @param carte2 : carte à laquelle nous allons comparer la carte courante
* @return : on retourne Vrai si la carte courante est inférieure a la carte en parametre
*/
public boolean estInferieure(Carte carte2){
boolean inferieure=false;
// Si une carte Vide est inférieure a toute carte
if (this.isVide()==true){
inferieure=true;
}
// On commence a trier les cartes par couleur
// Si le booleen si dessous est vrai alors, on sait que les couleurs ne sont pas égales
// en effet, l'inégalité dans la définition du booleen de la fonction précédente est stricte
if (couleurInferieure(this.getCouleur(), carte2.getCouleur())){
inferieure=true;
}
else {
if(this.getCouleur().equals(carte2.getCouleur())){
// Dans ce cas, les cartes ont la même couleur
// On va donc les comparer par valeur
if(this.getValeur()<carte2.getValeur()){
inferieure=true;
}
else {
if (this.getValeur().equals(carte2.getValeur())){
//Dans ce cas, les cartes ont même couleurs, même valeurs
//On les compare par forme
if (this.getForme().formeInferieure(carte2.getForme())){
inferieure=true;
}
else{
if(this.getForme().equals(carte2.getForme())){
inferieure=true;
}
}
}
}
}
}
return inferieure;
}
<hr size="2" width="100%" />
public class PaquetCarte extends ArrayList<Carte> {
public void ajoutCarte(int j, Carte carte){
ArrayList<Carte> ListeTemp = new ArrayList<Carte>();
int N=this.size();
if (N==j){
this.add(N,carte);
}
else {
for(int k=j;k<N;k++){
ListeTemp.add(this.get(k));
}
this.removeRange(j, N);
for(int p=0;p<N-j;p++){
this.add(j+p,ListeTemp.get(p));
}
}
}
public PaquetCarte triParInsertion(){
PaquetCarte paquetTrie;
PaquetCarte paquetNonTrie;
int nombreDeCartes;
int j;
Carte carte;
paquetNonTrie=new PaquetCarte("Paquet Non Trie");
paquetNonTrie.addAll(this);
nombreDeCartes=paquetNonTrie.size();
paquetTrie = new PaquetCarte("Paquet Trie");
paquetTrie.add(0,paquetNonTrie.remove(0));
for(int i=1; i<nombreDeCartes;i++){
j=0;
carte=paquetNonTrie.remove(0);
while(j<paquetTrie.size() && !carte.estInferieure(paquetTrie.get(j))){
j++;
}
// j est la position a laquelle dois se trouver la carte
// on va décaler toutes les cartes après j
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 4 mars 2009 à 20:18
Salut,
Tu ferais mieux de faire implémenter ta classe Carte de comparable, et de surcharger la fonction compareTo, ainsi tu n'a plus qu'à te soucier de comment comparer 2 cartes, pour l'algorithme de tri, tu pourras alors laisser la fonction Collections.sort s'en charger.
Par exemple (de tête, pas sûr que la syntaxe soit bonne) :
public class Carte implements Comparable {
public Integer compareTo(Carte carte2){
boolean inferieure=false;
// Si une carte Vide est inférieure a toute carte
if (this.isVide()==true){
inferieure=true;
}
// On commence a trier les cartes par couleur
// Si le booleen si dessous est vrai alors, on sait que les couleurs ne sont pas égales
// en effet, l'inégalité dans la définition du booleen de la fonction précédente est stricte
if (couleurInferieure(this.getCouleur(), carte2.getCouleur())){
inferieure=true;
}
else {
if(this.getCouleur().equals(carte2.getCouleur())){
// Dans ce cas, les cartes ont la même couleur
// On va donc les comparer par valeur
if(this.getValeur()<carte2.getValeur()){
inferieure=true;
}
else {
if (this.getValeur().equals(carte2.getValeur())){
//Dans ce cas, les cartes ont même couleurs, même valeurs
//On les compare par forme
if (this.getForme().formeInferieure(carte2.getForme())){
inferieure=true;
}
else{
if(this.getForme().equals(carte2.getForme())){
inferieure=true;
}
}
}
}
}
}
if (inferieure) {
return -1;
} else {
return 1;
}
}
Et pour trier :
taListeDeCarteTriee = Collections.sort(taListeDeCarteNonTriee);
______________________________________
DarK Sidious
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 5 mars 2009 à 07:49
Salut,
Pardon, ca me fait bien rire tout ces profs qui vous imposent des trucs vraiment pas standard : c'est pas comme cà qu'on apprends le langage : j'imagine bien le gars qui ne cherche pas plus loin que son cours, bon il découvrira jamais que pour faire un tri, on n'est pas obligé de réinventer la roue en java...
______________________________________
DarK Sidious