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