manque l'ex 5
This commit is contained in:
69
TP5/stub/exo4/Chef.java
Normal file
69
TP5/stub/exo4/Chef.java
Normal file
@@ -0,0 +1,69 @@
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Objects;
|
||||
|
||||
/** feuille du motif composite */
|
||||
public class Chef extends Person {
|
||||
private final LinkedHashSet<Person> subalternes;
|
||||
|
||||
// Attributs pour mémoriser les résultats
|
||||
private Integer bestPartyMemo = null;
|
||||
private Integer bestPartyWithoutMeMemo = null;
|
||||
|
||||
/** constructeur
|
||||
*
|
||||
* @param n fun factor
|
||||
*/
|
||||
public Chef(int n) {
|
||||
super(n);
|
||||
this.subalternes = new LinkedHashSet<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajoute un subalterne au chef
|
||||
*
|
||||
* @param p la personne à ajouter
|
||||
* @return true si le subalterne a été ajouté, false sinon
|
||||
*/
|
||||
public boolean addSubalterne(Person p) {
|
||||
return subalternes.add(Objects.requireNonNull(p));
|
||||
}
|
||||
|
||||
/**
|
||||
* La meilleure fête avec moi, c'est la meilleure fête sans mes subalternes pour eux plus moi.
|
||||
*
|
||||
* @return retourne la valeur de la meilleure fête en invitant seulement les gens dont cette personne est le ou la supérieure hiérarchique, mais pas elle.
|
||||
*/
|
||||
@Override
|
||||
public int bestPartyWithoutMe() {
|
||||
// Vérifie si la valeur est déjà calculée
|
||||
if (this.bestPartyWithoutMeMemo == null) {
|
||||
int sum = 0;
|
||||
for (Person subalterne : subalternes) {
|
||||
sum += subalterne.bestParty(); // Appelle uniquement bestParty(), qui est déjà mémorisé
|
||||
}
|
||||
this.bestPartyWithoutMeMemo = sum; // Mémorise le résultat
|
||||
}
|
||||
return this.bestPartyWithoutMeMemo;
|
||||
}
|
||||
|
||||
/**
|
||||
* La meilleure fête est soit sans moi (c'est l'union des meilleures fêtes de mes subalternes),
|
||||
* soit c'est la meilleure fête avec moi.
|
||||
*
|
||||
* @return la valeur de la meilleure fête en invitant seulement les gens dont cette personne est le ou la supérieure hiérarchique (peut-être avec elle).
|
||||
*/
|
||||
@Override
|
||||
public int bestParty() {
|
||||
// Vérifie si la valeur est déjà calculée
|
||||
if (this.bestPartyMemo == null) {
|
||||
int withMe = getFunFactor();
|
||||
for (Person subalterne : subalternes) {
|
||||
withMe += subalterne.bestPartyWithoutMe(); // Inclut uniquement bestPartyWithoutMe(), déjà mémorisé
|
||||
}
|
||||
|
||||
int withoutMe = bestPartyWithoutMe(); // Utilise la version mémorisée
|
||||
this.bestPartyMemo = Math.max(withMe, withoutMe); // Mémorise le meilleur résultat
|
||||
}
|
||||
return this.bestPartyMemo;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user