Salut,
En gros, tu dois écrire une méthode qui :
- ajoute un monôme dans un polynôme
- s'il existe déjà un monôme de même puissance, ça n'ajoute pas, ça remplace
C'est bien ça ?
Il serait plus utile de nous montrer le code de la classe Polynomial que la méthode main, donc je vais parler principes. Le principe est simple : pour remplacer un monôme, quelque soit les conditions, il faut en avoir la référence. Si on ne l'a pas, il faut la chercher.
Avec un stockage sous forme de List, il suffit de la parcourir, et de comparer la puissance de chaque monôme parcouru, et s'il y'en a un qui a la même puissance que celui qu'on ajoute, on le remplace. Si on a rien remplacé, à la fin, on ajoute.
Exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| void add(Monome monome) {
boolean remplace=false; // au début on a rien remplacé
for(int i=0; i<listeDeMonomes.size(); i++) { // on parcourt les monômes déjà dans la liste
if ( listeDeMonomes.get(i).getPuissance()==monome.getPuissance()) { // il existe déjà un monôme de même puissance que celui ajouté et il est en position i
listeDeMonomes.set(i, monome); // on remplace
remplace=true; // on mémorise qu'on a remplacé
break; // on sort de la boucle parce que ce n'est plus la peine de chercher
}
}
if( !remplace ) { // on n'a rien remplacé, on ajoute
listeDeMonomes.add(monome);
}
} |
Une variante sans le booléen pourrait être
1 2 3 4 5 6 7 8 9 10 11
| void add(Monome monome) {
for(int i=0; i<listeDeMonomes.size(); i++) { // on parcourt les monômes déjà dans la liste
if ( listeDeMonomes.get(i).getPuissance()==monome.getPuissance()) { // il existe déjà un monôme de même puissance que celui ajouté et il est en position i
listeDeMonomes.set(i, monome); // on remplace
return; // on sort de la méthode
}
}
// on n'a rien remplacé, on ajoute
listeDeMonomes.add(monome);
} |
Mais un puriste pourrait te dire que ce n'est pas structuré (plusieurs points de sortie).
Une autre solution est d'utiliser une Map. En utilisant les puissances comme clefs. La solution est alors tout simple, de par le fonctionnement naturel de la Map (toute clef ne figure qu'une seule fois : donc écrire un mapping remplace le précédent s'il existe).
La map pourra être déclarée et initialisée comme ça
private Map<Integer, Monome> map = new HashMap<>();
Ou éventuellement une TreeMap pour avoir un tri selon les coefs, mais je ne sais pas si vous avez déjà vu ça en cours. (
private Map<Integer, Monome> map = new TreeMap<>(Comparator.<Integer>naturalOrder().reversed());
)
Donc tout simplement :
1 2 3
| public void addMonome(Monome monome) {
map.put(monome.getPuissance(), monome);
} |
Maintenant, de ce que je vois de ton code, c'est que tu n'as pas de classe Monome. Avec une map, on peut mapper les coef sur les puissances, donc on pourrait avoir une map définie comme ça :
private Map<Integer, Double> map = new HashMap<>();
et donc
1 2 3
| public void addMonome(double coef, int puissance) {
map.put(puissance, coef);
} |
tout simplement
Partager