/*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]);
  }     
}