BUT2/DEV/DEV_Madelaine/stub/exo4/Chef.java
2023-11-29 16:08:44 +01:00

76 lines
2.2 KiB
Java

import java.util.LinkedHashSet;
import java.util.Objects;
import java.util.*;
/** feuille du motif composite */
public class Chef extends Person {
private List<Person> listeSubalterne;
private int[] listeFun = {-1, -1, -1}; // 0 best, 1 avec, 2 sans
public boolean addSubalterne(Person p){
return this.listeSubalterne.add(p);
}
/** constructeur
*
* @param n fun factor
*
*/
public Chef(int n){
super(n);
this.listeSubalterne = new ArrayList<>();
}
/**
* 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.
*
*/
public int bestPartyWithoutMe(){
if (this.listeFun[0] < 0){
int fun = 0;
for (Person invitee : this.listeSubalterne){
fun += invitee.bestParty();
}
this.listeFun[0] = fun;
}
return this.listeFun[0];
}
/**
* 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.
*
*/
private int bestPartyWithMe(){
if (this.listeFun[1] < 0){
int fun = this.getFunFactor();
for (Person invitee : this.listeSubalterne){
fun += invitee.bestPartyWithoutMe();
}
this.listeFun[1] = fun;
}
return this.listeFun[1];
}
/**
* 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).
*
*/
public int bestParty(){
return Math.max(this.bestPartyWithMe(), this.bestPartyWithoutMe());
}
}