Un albero di ulivo può avere foglie o olive il metodo raccogliOlive

Un albero di ulivo può avere foglie o olive il metodo raccogliOlive trasforma le olive in
foglie rendendo il numero di olive raccolte.
Per la definizione di oliva si consideri attentamente il metodo oliva() che crea un’oliva.
Completare il seguente programma, consegnare una copia del metodo raccogliOlive ed
eventuali metodi ausiliari ed eseguire il tutto. Se si ritiene di avere fatto pochi errori inviare, per email, entro il 20 gennaio, la copia del metodo corretto, funzionante a [email protected] e
[email protected].
publ ic cla ss OliveA {
pub lic st ati c voi d main(String[] args) {
for (i nt i = 0; i < 5; i++) {
OilNode A = crea(i);
System.out.print(" pianta iniziale "); print1(A); System.out.println("");
System.out.println(" numero olive raccolte = " + raccogliOlive(A));
System.out.print(" pianta finale "); print1(A); System.out.println("");
System.out.println();
}
}
pri vat e sta tic vo id print1(OilNode a) {
if (a == n ull ) ret urn ;
if (isFoglia(a)) System.out.print(" F ");
else if (isOliva(a)) System.out.print(" O ");
else {
System.out.print("(");
print1(a.left); System.out.print(" N "); print1(a.right);
System.out.print(")");
}
}
pri vat e s tat ic OilNode foglia() {r etur n n ew OilNode(nu ll,nul l);}
pri vat e s tat ic OilNode oliva() {OilNode f = foglia(); r etu rn a(f, f);}
pri vat e s tat ic OilNode a(OilNode l, OilNode r) {r etu rn new OilNode(l, r);}
pri vat e s tat ic OilNode crea(i nt i) {
swit ch (i) {
case 0: ret urn a(foglia(), oliva());
case 1: ret urn a(a(a(foglia(), oliva()), foglia()), a(foglia(), oliva()));
case 2: ret urn a(a(a(foglia(), foglia()), oliva()), a(oliva(), oliva()));
case 3: ret urn foglia();
case 4: ret urn oliva();
}
retu rn nul l;
}
/*
* il metodo raccogliOlive trasforma le olive in foglie
* rendendo il numero di olive raccolte
*/
pub lic s tat ic int raccogliOlive(OilNode a) {
...
da completare ...
}
publ ic cla ss OilNode {
publ ic OilNode left, right;
publ ic OilNode(OilNode l, OilNode r) {
this .left = l;
this .right = r;
}
}
Il risultato deve essere
pianta iniziale ( F N O )
numero olive raccolte = 1
pianta finale ( F N F )
pianta iniziale ((( F N O ) N F ) N ( F N O ))
numero olive raccolte = 2
pianta finale ((( F N F ) N F ) N ( F N F ))
pianta iniziale ((( F N F ) N O ) N ( O N O ))
numero olive raccolte = 3
pianta finale ((( F N F ) N F ) N ( F N F ))
pianta iniziale F
numero olive raccolte
pianta finale F
= 0
pianta iniziale O
numero olive raccolte
pianta finale F
= 1
ATTENZIONE:
Non è permesso alterare le specifiche
Un albero di ulivo può avere foglie o olive il metodo cresconoOlive trasforma le foglie in
olive rendendo il numero di olive cresciute.
Per la definizione di oliva si consideri attentamente il metodo oliva() che crea un’oliva.
Completare il seguente programma, consegnare una copia del metodo cresconoOlive ed
eventuali metodi ausiliari ed eseguire il tutto. Se si ritiene di avere fatto pochi errori inviare, per email, entro il 20 gennaio, la copia del metodo corretto, funzionante a [email protected] e
[email protected].
publ ic cla ss OliveB {
publ ic sta tic v oid main(String[] args) {
for (i nt i = 0; i < 5; i++) {
OilNode A = crea(i);
System.out.print(" pianta iniziale "); print1(A); System.out.println("");
System.out.println(" numero olive cresciute = " + cresconoOlive(A));
System.out.print(" pianta finale "); print1(A); System.out.println("");
System.out.println();
}
}
priv ate st ati c voi d print1(OilNode a) {
if (a == n ull ) ret urn ;
if (isFoglia(a)) System.out.print(" F ");
else if (isOliva(a)) System.out.print(" O ");
else {
System.out.print("(");
print1(a.left); System.out.print(" N "); print1(a.right);
System.out.print(")");
}
}
pri vat e s tat ic OilNode foglia() {r etur n n ew OilNode(nu ll,nul l);}
pri vat e s tat ic OilNode oliva() {OilNode f = foglia(); r etu rn a(f, f);}
pri vat e s tat ic OilNode a(OilNode l, OilNode r) {r etu rn new OilNode(l, r);}
pri vat e sta tic OilNode crea(int i) {
swit ch (i) {
case 0: r etu rn a(foglia(), oliva());
case 1: r etu rn a(a(a(foglia(), oliva()), foglia()), a(foglia(), oliva()));
case 2: r etu rn a(a(a(foglia(), foglia()), oliva()), a(oliva(), oliva()));
case 3: r etu rn foglia();
case 4: r etu rn oliva();
}
retu rn nul l;
}
/*
* il metodo cresconoOlive trasforma le foglie in olive
* rendendo il numero di olive cresciute
*/
publ ic sta tic i nt cresconoOlive(OilNode a) {
...
da completare ...
}
publ ic cla ss OilNode {
publ ic OilNode left, right;
publ ic OilNode(OilNode l, OilNode r) {
this .left = l;
this .right = r;
}
}
Il risultato deve essere
pianta iniziale ( F N O )
numero olive cresciute = 1
pianta finale ( O N O )
pianta iniziale ((( F N O ) N F ) N ( F N O ))
numero olive cresciute = 3
pianta finale ((( O N O ) N O ) N ( O N O ))
pianta iniziale ((( F N F ) N O ) N ( O N O ))
numero olive cresciute = 2
pianta finale ((( O N O ) N O ) N ( O N O ))
pianta iniziale F
numero olive cresciute
pianta finale O
= 1
pianta iniziale O
numero olive cresciute
pianta finale O
= 0
ATTENZIONE:
Non è permesso alterare le specifiche