/*
Una stazione termale offre tre terapie: fanghi, lampade e inalazioni.
Le clienti donne possono chiedere solo fanghi e lampade.
I clienti uomini possono chiedere solo lampade e inalazioni.
Dato il costo di ciascun tipo di prestazione (fanghi, lampade, inalazioni)
e generata casualmente una comitiva mista di dieci amici si vuole sapere quanto costerà
complessivamente il loro trattamento termale.
*/
public class Terme {
public static void main(String args[]) {
Cliente[] comitiva = new Cliente[10];
for (int c=0; c<comitiva.length; c++)
if (Math.random()>.5) comitiva[c] = new Uomo();
else comitiva[c] = new Donna();
//costo
float costo=0;
for (int c=0; c<comitiva.length; c++) {
costo += comitiva[c].getCosto();
System.out.println(comitiva[c]);
}
System.out.println("Spesa amici: "+costo);
}
}
interface terapie {
public static final float[] costi = {10.0F, 12.50F, 13.50F};
public static final String[] nomi = {"Fanghi", "Lampade", "Inalazioni"};
}
abstract class Cliente implements terapie {
protected boolean[] myterapie = {false, false, false};
//membro concreto
public float getCosto() {
float costo=0;
for (int c=0; c<myterapie.length; c++)
if (myterapie[c]==true) costo += costi[c];
return costo;
}
}
class Donna extends Cliente {
//costruttore
public Donna() {
do {
myterapie[0] = (Math.random()>.5)? true : false;
myterapie[1] = (Math.random()>.5)? true : false;
} while (myterapie[0]==false && myterapie[1]==false);
}
//overridden
public String toString() {
return "Donna con "+((myterapie[0])? nomi[0] : "") +
((myterapie[1])? " "+nomi[1] : "");
}
}
class Uomo extends Cliente {
//costruttore
public Uomo() {
do {
myterapie[1] = (Math.random()>.5)? true : false;
myterapie[2] = (Math.random()>.5)? true : false;
} while (myterapie[1]==false && myterapie[2]==false);
}
//overridden
public String toString() {
return "Uomo con "+((myterapie[1])? nomi[1] : "") +
((myterapie[2])? " "+nomi[2] : "");
}
}