/*Un laboratorio di pasticceria produce torte di vario peso e composizione.
Le torte sono di due tipi: frutta e non frutta. Per ogni torta si conosce il peso e il prezzo complessivo.
Sia dato un bancone di 25 torte (le cui caratteristiche possono essere assegnate a caso).
Scrivere un programma JAVA che consenta di conoscere:
a) il peso complessivo delle torte alla frutta;
b) il peso complessivo delle torte non frutta;
c) quale torta non frutta ha il prezzo più basso al kilogrammo;
d) quale torta frutta ha il prezzo più alto al kilogrammo*/
/* *****************************************************
*************CLASSE PRINCIPALE (col Main)************
***************************************************** */
class laboratorio2 {
public static void main(String[] args) {
bancone savia = new bancone();
savia.stampaTorte();
System.out.println("Peso complessivo torte Frutta: "+ savia.getPesoTotaleFrutta());
System.out.println("Peso complessivo torte NON Frutta: "+ savia.getPesoTotaleNonFrutta());
savia.statistiche();
}
}
abstract class torta {
protected int peso, prezzo;
//costruttore
public torta(int peso, int prezzo) {
this.peso = peso;
this.prezzo = prezzo;
}
//metodo pubblico concreto
public int getPrezzoAlKilo() {return prezzo/peso;}
public int getPeso() {return peso;}
}
class frutta extends torta {
//costruttore
public frutta(int peso, int prezzo) {
super(peso, prezzo);
}
//overridden of "toString()"
public String toString() {return "Torta alla frutta di peso:"+peso+
" e prezzo "+prezzo+ " (al Kg "+getPrezzoAlKilo()+")";}
}
class nonfrutta extends torta {
//costruttore
public nonfrutta(int peso, int prezzo) {
super(peso, prezzo);
}
//overridden of "toString()"
public String toString() {return "Torta NON frutta di peso:"+peso+
" e prezzo "+prezzo+ " (al Kg "+getPrezzoAlKilo()+")";}
}
class bancone {
//membri privati
private int pesototFrutta=0, pesototNonfrutta=0;
private torta[] torte = new torta[25];
//costruttore
public bancone() {
//inizializzo torte casualmente
for (int c=0; c<torte.length; c++)
if (Math.random()<.5) {
torte[c] = new frutta((int)(Math.random()*10+1), (int)(Math.random()*15000+5000));
//giakkè c'è un ciclo aperto, approfitto x calcolare il peso totale delle torte ;-)
pesototFrutta += torte[c].getPeso();
}
else {
torte[c] = new nonfrutta((int)(Math.random()*10+1), (int)(Math.random()*15000+5000));
//vedi sopra...
pesototNonfrutta += torte[c].getPeso();
}
}
//metodi pubblici
public int getPesoTotaleFrutta() {return pesototFrutta;}
public int getPesoTotaleNonFrutta() {return pesototNonfrutta;}
public void stampaTorte() {
for (int c=0; c<torte.length; c++)
System.out.println(c+" - "+torte[c]);
}
public void statistiche() {
//mostra statistiche prezzo + alto e + basso
//UN SOLO CICLO !!
int min = torte[0].getPrezzoAlKilo(), indexF = 0, //min & max => prezzi delle torte NonFr & Fr
max = 0, indexNF = 0; //indexF & indexNF => indice Array
for (int c=0; c<torte.length; c++)
if (torte[c] instanceof frutta) {
if (torte[c].getPrezzoAlKilo() > max) {
max = torte[c].getPrezzoAlKilo();
indexF = c;
}
}
else {
if (torte[c].getPrezzoAlKilo() < min) {
min = torte[c].getPrezzoAlKilo();
indexNF = c;
}
}
System.out.println("\nPrezzo piu' basso n°:"+indexNF+" "+torte[indexNF]);
System.out.println("\nPrezzo piu' alto: "+indexF+" "+torte[indexF]);
}
}