edutecnica

Esercizio 2        

Scrivi un programma che simuli il lancio di un dado e di una moneta stampandone il risultato; con e senza l'utilizzo di una classe astratta che rappresenti i comportamenti comuni degli oggetti dado e moneta istanziati.


Ci basiamo su uno scritto preliminare come il seguente:

class azzardo {
public static void main (String[] args) {
    Dado d=new Dado();
    Moneta m=new Moneta();
    d.lancio();
    m.lancio();
    System.out.println(d.get());
    System.out.println(m.get());
} //fine main
} //fine classe azzardo

class Dado{
private int n;
//costruttore
public Dado(){n=1;}
public void lancio(){n=(1+(int)(Math.random()* 6));}
public int get(){return n;}
}//fine classe Dado

class Moneta{
private int h;
public Moneta(){h=0;}
public void lancio(){h=(int)(Math.random()* 2);}
public int get(){return h;}
//si assume 0=testa, 1=croce
}//fine classe Moneta

I metodi get() che restituiscono il risultato del lancio (dello stesso tipo int) possono essere accorpati ad un'unica classe astratta che chiameremo OggettoLanciato e che per praticità include un metodo supplementare print() per la stampa dei risultati che ora è affidato al metodo main().

class azzardo {
public static void main (String[] args) {
     Dado d=new Dado();
     Moneta m=new Moneta();
     d.lancio();
     m.lancio();
     d.print();
     m.print();
} //fine main
} //fine classe azzardo

abstract class OggettoLanciato {
protected int x;
abstract void lancio();
public int get(){return x;}
public void print(){System.out.println(get());}
}// fine classe astratta

class Dado extends OggettoLanciato{
public Dado(){x=1;} //costruttore
public void lancio(){x=(1+(int)(Math.random()* 6));} }//fine classe Dado

class Moneta extends OggettoLanciato{
public Moneta(){x=0;} //costruttore
public void lancio(){x=(int)(Math.random()* 2);}
//si assume 0=testa, 1=croce
}//fine classe Moneta