/*
In una salumeria si confezionano pacchi regalo di tre tipi:
uno con salami e prosciutti, uno con salami e frutta secca e uno con prosciutto e frutta secca.
Per ogni specialità (salame, prosciutto o frutta secca) in ciascun pacco viene fatta una pesata
e il costo del cesto è determinato una volta che siano fissati i prezzi al chilogrammo dei tre alimenti.
*/
public class Salumeria {
//Il programma inizia con una chiamata al metodo main().
public static void main(String args[]) {
Pacco[] pacchi = new Pacco[10];
double cas;
for (int c=0; c<pacchi.length; c++) {
cas = Math.random();
if (cas<.3) pacchi[c] = new pacco1();
else if (cas<.6) pacchi[c] = new pacco2();
else pacchi[c] = new pacco3();
System.out.println("Creato " + pacchi[c]);
}
//Quale costa di più?
float max=0; int index=0;
for (int c=0; c<pacchi.length; c++)
if (pacchi[c].getCosto()>max) {
max=pacchi[c].getCosto();
index = c;
}
System.out.println("Pacco piu' costoso: "+pacchi[index] + ", che costa " + max);
}
}
interface specie {
public static final String[] alimenti = {"Salame", "Prosciutto", "Frutta secca"};
public static final float[] costi = {5.0F, 12.0F, .5F};
}
abstract class Pacco implements specie {
//variab. di istanza
protected float[] pesoalimenti = {0.0F, 0.0F, 0.0F};
//metodo concreto
public float getCosto() {
float totale = 0.0F;
for (int c=0; c<pesoalimenti.length; c++)
if (pesoalimenti[c] != 0.0F) totale += pesoalimenti[c] * costi[c];
return (float)((int)(totale*100))/100;
}
public float getPeso() {
float totale = 0.0F;
for (int c=0; c<pesoalimenti.length; c++)
if (pesoalimenti[c] != 0.0F) totale += pesoalimenti[c];
return (float)((int)(totale*100))/100;
}
}
class pacco1 extends Pacco {
//costruttore
public pacco1() {
pesoalimenti[0] = (float)(Math.random()*2.0F + .1F);
pesoalimenti[1] = (float)(Math.random()*2.0F + .1F);
}
//overridden
public String toString() {
return "Tipo: " + alimenti[0] + " e " + alimenti[1] + ". Peso " + getPeso() + "Kg";
}
}
class pacco2 extends Pacco {
//costruttore
public pacco2() {
pesoalimenti[0] = (float)(Math.random()*2.0F + .1F);
pesoalimenti[2] = (float)(Math.random()*2.0F + .1F);
}
//overridden
public String toString() {
return "Tipo: " + alimenti[0] + " e " + alimenti[2] + ". Peso " + getPeso() + "Kg";
}
}
class pacco3 extends Pacco {
//costruttore
public pacco3() {
pesoalimenti[1] = (float)(Math.random()*2.0F + .1F);
pesoalimenti[2] = (float)(Math.random()*2.0F + .1F);
}
//overridden
public String toString() {
return "Tipo: " + alimenti[1] + " e " + alimenti[2] + ". Peso " + getPeso() + "Kg";
}
}