Commit f8fec18a authored by Paul Esteve's avatar Paul Esteve
Browse files

Ajout de la hashmap pour le zoo

parent 7b1a31e3
import java.time.*;
public class BouteilleJus extends Bouteille {
public static int DEFAULT_SEC_AVT_PEREMPTION = 1;
private int secondsAvantPeremption ;
private LocalDateTime dateTimePremiereOuverture;
public BouteilleJus(String nom, int q, int secondsAvantPeremption) {
super(nom, q);
dateTimePremiereOuverture = null;
this.secondsAvantPeremption = secondsAvantPeremption;
}
public BouteilleJus(String nom, int q) {
this(nom, q, DEFAULT_SEC_AVT_PEREMPTION);
}
@Override
public void ouvrir() {
if(dateTimePremiereOuverture == null){
dateTimePremiereOuverture = LocalDateTime.now();
}
super.ouvrir();
}
@Override
public void verser(Verre v, int q) {
if(estPerimee()) {
System.out.println("beurk ca va être pas bon !");
}
super.verser(v, q);
}
// retourne le temps depuis 1ere ouverture
private long secondsDepuisPremiereOuverture() {
if(dateTimePremiereOuverture == null) {
return 0;
}
return Duration.between(dateTimePremiereOuverture, LocalDateTime.now()).toMillis() / 1000;
}
public boolean estPerimee() {
return secondsDepuisPremiereOuverture() > secondsAvantPeremption;
}
@Override
public String toString() {
return super.toString()
+ " date ouverture " + dateTimePremiereOuverture
+ " ouverte depuis : " + secondsDepuisPremiereOuverture()
+ " Perimée ? " + estPerimee();
}
}
import java.util.*;
import animals.*;
import animals.regimes.*;
/** Une classe représentant un Zoo :
*
......
import java.util.*;
import animals.*;
/** Une classe représentant un Zoo :
*
* Un zoo a un nom, et peut contenir un nombre quelconque d'animaux.
* On peut : ajouter un nouvel animal, récupérer le nombre d'animaux, calculer le cout de nourriture
* total, récupérer une chaine de caractères représentant l'état du Zoo.
*
*/public class ZooBis {
private String nom;
private LinkedList<Animal> listA;
private HashMap<String,Animal> tabA;
/** Construit le zoo de nom name, initialement vide */
public ZooBis(String name) {
nom=name;
tabA = new HashMap<String,Animal>();
listA = new LinkedList<Animal>();
}
/** Ajoute l'animal a au zoo */
public void addAnimal(Animal a) {
// for(Animal o : animaux) {
// if (a.getName().equals(o.getName())) {
// throw new IllegalArgumentException("Il existe déjà un animal appelé " + a.getName() + " dans le zoo\n" );
// }
// }
if(tabA.containsKey(a.getName())){
throw new IllegalArgumentException("Le zoo contient déjà un animal nommé " + a.getName() + "\n");
}
listA.add(a);
tabA.put(a.getName(), a);
}
public Animal getAnimal(String name){
if (!tabA.containsKey(name)) {
throw new IllegalArgumentException("Le zoo ne contient pas d'animal nommé " + name + "\n");
}
return tabA.get(name);
}
public void removeAnimal(String name){
if (!tabA.containsKey(name)) {
throw new IllegalArgumentException("Le zoo ne contient pas d'animal nommé " + name + "\n");
}
listA.remove(tabA.get(name));
tabA.remove(name);
}
/** Retourne le nombre d'animaux contenu dans le zoo */
public int nbAnimaux() {
return listA.size();
}
/** Retourne le cout total du zoo par jour (cout de nourriture) */
public double coutTotal() {
double cout = 0;
for(Animal a : listA) {
cout += a.getCout();
}
return cout;
}
/** Retourne une chaine de caractères repréentant l'état du zoo et de tous ces animaux */
public String toString() {
String s= "Zoo:"+nom+" avec "+nbAnimaux()+" animaux\n";
for (Animal a : listA) s += " " + a + "\n";
return s;
}
}
package animals;
// package animals.species;
import animals.regimes.*;
public class Aigle extends Carnivore {
public class Aigle extends Animal {
static private double QTE_PAR_JOUR_PAR_DEFAUT = 1;
private double envergure;
public Aigle(String nom, double poids, double env){
super(nom, poids, QTE_PAR_JOUR_PAR_DEFAUT);
// super(nom, poids, QTE_PAR_JOUR_PAR_DEFAUT);
super(nom, poids, new Viande(QTE_PAR_JOUR_PAR_DEFAUT)); //QTE_PAR_JOUR_PAR_DEFAUT
this.envergure = env;
}
public Aigle(String nom, double poids, double env, double qte){
super(nom, poids, qte);
super(nom, poids, new Viande(qte) );
this.envergure = env;
}
......@@ -26,12 +29,13 @@ public class Aigle extends Carnivore {
return "Espèce : Aigle\n" + super.toString() + "\nEnvergue : " + envergure + "cm";
}
/*
@Override
public boolean equals(Object o){
if(! (o instanceof Aigle) ) return false;
Aigle a = (Aigle) o;
return super.equals(a);
return super.equals(a) && a.envergure == this.envergure;
}
*/
}
package animals;
import animals.regimes.*;
public abstract class Animal {
private String nom;
private double poids;
// private double qteNour;
private Regime regime;
// protected double qteNour;
public Animal(String nom, double poids){ // , double qteNour
public Animal(String nom, double poids, Regime regime){ // , double qteNour
this.nom = nom;
this.poids = poids;
this.regime = regime;
// this.regime = new Regime(qte);
// this.qteNour =qteNour;
}
protected Regime getRegime(){
return regime;
}
public double getPoids(){
return poids;
}
......@@ -28,18 +39,24 @@ public abstract class Animal {
poids = p;
}
abstract public double getCout();
public double getCout(){
return regime.getCout();
}
@Override
public String toString(){
return "Nom : " + nom + "\nPoids : " + poids + " kg";
return "Nom : " + nom + "\nPoids : " + poids + " kg\n" + regime;
}
@Override
public boolean equals(Object o){
if (! (o instanceof Animal) ) return false;
Animal a = (Animal) o;
return nom.equals(a.nom) && poids == a.poids;
return this.nom.equals(a.nom) && this.poids == a.poids;
}
public int hashCode(){
return nom.hashCode();
}
}
// package animals.species
package animals;
public class Autruche extends Herbivore {
private int nbrPlumes;
import animals.regimes.*;
public class Autruche extends Animal {
private int nbrPlumes;
static private final double QTE_PAR_JOUR = 5;
public Autruche(String nom, double poids, int nbrPlumes){
super(nom, poids, 5);
super(nom, poids, new Legume(QTE_PAR_JOUR));
this.nbrPlumes = nbrPlumes;
}
......@@ -22,8 +25,6 @@ public class Autruche extends Herbivore {
@Override
public String getCri(){
return "Beuuuuuuglement semblable à celui d'une vache";
......@@ -34,12 +35,13 @@ public class Autruche extends Herbivore {
return "Espèce : Autruche\n" + super.toString() + "\nNombre de plumes : " + nbrPlumes;
}
/*
@Override
public boolean equals(Object o){
if(! (o instanceof Autruche) ) return false;
Autruche c = (Autruche) o;
return super.equals(c) && c.nbrPlumes == nbrPlumes;
}
*/
}
// package animals.species;
package animals;
import animals.regimes.*;
public class Chimpanze extends Animal {
static private final double QTE_PAR_JOUR = 3;
public class Chimpanze extends Herbivore {
public Chimpanze(String nom, double poids){
super(nom, poids, 3);
super(nom, poids, new Legume(QTE_PAR_JOUR));
}
@Override
......@@ -15,13 +18,13 @@ public class Chimpanze extends Herbivore {
public String toString(){
return "Espèce : Chimpanze\n" + super.toString();
}
/*
@Override
public boolean equals(Object o){
if(! (o instanceof Chimpanze) ) return false;
Chimpanze c = (Chimpanze) o;
// if(! (o instanceof Chimpanze) ) return false;
// Chimpanze c = (Chimpanze) o;
return super.equals(c);
}
*/
}
// package animals.species;
package animals;
import animals.regimes.*;
public class Orque extends Carnivore {
public class Orque extends Animal {
static private final double QTE_PAR_JOUR_PAR_KG = 0.1;
public Orque(String nom, double poids){
super(nom, poids, QTE_PAR_JOUR_PAR_KG*poids);
super(nom, poids, new Viande(QTE_PAR_JOUR_PAR_KG*poids));
}
@Override
......@@ -21,15 +22,15 @@ public class Orque extends Carnivore {
@Override
public void setPoids(double p){
super.setPoids(p);
this.qteViandeParJour = QTE_PAR_JOUR_PAR_KG * this.getPoids();
this.getRegime().setQte(QTE_PAR_JOUR_PAR_KG * this.getPoids()) ;
}
/*
@Override
public boolean equals(Object o){
if(! (o instanceof Orque) ) return false;
Orque or = (Orque) o;
// if(! (o instanceof Orque) ) return false;
// Orque or = (Orque) o;
return super.equals(or);
}
*/
}
// package animals.species;
package animals;
import animals.regimes.*;
public abstract class Tigre extends Carnivore {
public abstract class Tigre extends Animal {
static private final double QTE_PAR_JOUR = 4;
private int nbrRayures;
public Tigre(String nom, double poids, int nbrRayures){
super(nom, poids, QTE_PAR_JOUR);
super(nom, poids, new Viande(QTE_PAR_JOUR));
this.nbrRayures = nbrRayures;
}
......@@ -24,12 +25,14 @@ public abstract class Tigre extends Carnivore {
// this.qteViandeParJour = QTE_PAR_JOUR_PAR_KG * this.getPoids();
// }
/*
@Override
public boolean equals(Object o){
if(! (o instanceof Tigre) ) return false;
Tigre t = (Tigre) o;
return super.equals(t) && t.nbrRayures == nbrRayures;
}
*/
}
package animals;
// package animals.species;
public class TigreBlanc extends Carnivore {
public class TigreBlanc extends Tigre {
private int nbrRayures;
public TigreBlanc(String nom, double poids, int nbrRayures){
......@@ -26,8 +26,8 @@ public class TigreBlanc extends Carnivore {
@Override
public boolean equals(Object o){
if(! (o instanceof TigreBlanc) ) return false;
TigreBlanc t = (TigreBlanc) o;
// if(! (o instanceof TigreBlanc) ) return false;
// TigreBlanc t = (TigreBlanc) o;
return super.equals(t);
}
......
// package animals.species;
package animals;
public class TigreDuBengale extends Carnivore {
public class TigreDuBengale extends Tigre {
private int nbrRayures;
public TigreDuBengale(String nom, double poids, int nbrRayures){
......@@ -23,12 +23,13 @@ public class TigreDuBengale extends Carnivore {
// this.qteViandeParJour = QTE_PAR_JOUR_PAR_KG * this.getPoids();
// }
/*
@Override
public boolean equals(Object o){
if(! (o instanceof TigreDuBengale) ) return false;
TigreDuBengale t = (TigreDuBengale) o;
// if(! (o instanceof TigreDuBengale) ) return false;
// TigreDuBengale t = (TigreDuBengale) o;
return super.equals(t);
}
}*/
}
package animals.regimes;
public class Legume extends Regime {
public Legume(double qte){
super(qte);
}
@Override
public double getCout(double qte){
return 1.2 * Math.log((qte +5 ) * 2 + 1);
public double getCout(){
return 1.2 * Math.log((this.getQte() +5 ) * 2 + 1);
}
@Override
public String toString(){
return super.toString() + "Végétarien";
return super.toString() + this.getQte() + "kg légume/j";
}
}
package animals.regimes;
public abstract class Regime {
abstract public double getCout(double qte);
private double qte;
public Regime(double qte){
this.qte = qte;
}
public void setQte(double qte){
this.qte = qte;
}
public double getQte(){
return qte;
}
abstract public double getCout();
@Override
public String toString(){
......
package animals.regimes;
public class Viande extends Regime {
public Viande(double qte){
super(qte);
}
@Override
public double getCout(double qte){
return Math.pow((qte* 10), 2) + 100;
public double getCout(){
return Math.pow((this.getQte()* 10), 2) + 100;
}
@Override
public String toString(){
return super.toString() + "Carnivore";
return super.toString() + this.getQte() + "kg viande/j";
}
}
import animals.*;
import animals.regimes.*;
// import animals.species.*;
public class TestZoo {
public static void main(String[] args) {
Zoo phelma = new Zoo("Minatec");
ZooBis phelma = new ZooBis("Minatec");
TigreDuBengale tigrou = new TigreDuBengale("Fantôme", 120, 40); // 120kg et 40 rayures
phelma.ajoute(tigrou);
phelma.addAnimal(tigrou);
Autruche aut = new Autruche("Ann", 50, 300); // 50kg et 300 plumes
phelma.ajoute(aut);
phelma.addAnimal(aut);
Chimpanze chips = new Chimpanze("Chita", 30); // 30kg
phelma.ajoute(chips);
phelma.addAnimal(chips);
Aigle ai = new Aigle("Roquette", 5, 200, 2); // 5kg, 200cm d'envergure et bouffe 2kg
phelma.ajoute(ai);
phelma.addAnimal(ai);
Orque az = new Orque("Azog", 9000); // 9t
phelma.ajoute(az);
phelma.addAnimal(az);
try {
phelma.removeAnimal("Jaja");
} catch(IllegalArgumentException e) {
System.out.println(e);
}
System.out.println("Voici le zoo :\n" + phelma);
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment