Secondo Appello 13/6/2001 - Dipartimento di Informatica
Transcript
Secondo Appello 13/6/2001 - Dipartimento di Informatica
Corso di Laurea: Informatica Corso: Linguaggi di Programmazione II° - Prova in Itinere n° : 2 del 16 Giugno 2004 Cognome Nome (in stampatello): Matricola o estremi del documento: N. Testo dell’esercizio Soluzione dello studente o testo descrittivo. Nel caso non sia sufficiente lo spazio, specificare “la soluzione continua sui fogli allegati” N. Mostrare con un esempio in cosa consiste la tecnica dell’”overriding” e quando è necessario utilizzarla. Punti (tempo) % 2 (5‘) 1 % N. Mostrare la sintassi del costrutto throw e spiegarne la semantica con un esempio. 2 (5’) 2 % Commentare il codice seguente e specificare il valore stampato dal programma se lanciato con il comando:java boot aabbccdd public class test22 { String mST; public test22( String tt) { mST = tt; } N. public String bar(String tt) throws Exception { return mST.substring(mST.indexOf(tt)); } } public class boot { public static void main(String[] args) { test22 c = new test22( args[0]); String ris = ""; try { ris += c.bar( "cc"); ris += c.bar( "dd"); ris += c.bar( "ee"); } catch( Exception e) {ris += "--";} System.out.println("ris: " + ris); } } 5 (15’) 3 % Commentare il codice della classe test21 specificando l’output prodotto termine della esecuzione del main. N. public class test21 { ArrayList pl; public test21( int k) { pl = new ArrayList(); for(int i = 1; i <= k; i++) pl.add( new Integer( i)); } public ArrayList foo( int div) { ListIterator it = pl.listIterator(); for(int rst=0; it.hasNext(); ) { rst = ((Integer) it.next()).intValue() % div; if (rst == 0) it.remove(); } return pl; } } public class boot { static public void main(String[] args) { test21 b = new test21( 20); b.foo( 3); ArrayList al = b.foo( 5); Iterator it = al.iterator(); for( ; it.hasNext();) System.out.print( it.next()+" - "); } 5 (15’) } 4 % Pagina 1 di 2 Individuare almeno tre errori (sintattici e semantici) nel seguente codice : public class test23 { public static string m; N. public test23(int i) { m = m.concat( i.valueOf( i)); } } class boot { public static void main(String[] args) { Object a[]; for(int i = 0; i < ParseInt(args[0]); i++) a[i] = new test23( new Integer(i)) System.out.println(“last: “ + i); } } 5 (15’) 5 % Un Pokemon è un animale soggetto a successive evoluzioni. Ogni carta rappresenta un Pokemon con un nome, l’energia disponibile, la potenza d’attacco e un intero che rappresenta la generazione a cui appartiene. Nella prima evoluzione sa solo presentarsi() ed evolversi(). Dalla seconda evoluzione può anche N. difendere(). Dalla terza evoluzione può anche attaccare(). Dalla quarta può aggiornare Energia(newValue). Definire le 4 classi (PokemonV1, PokemonV2, …) corrispondenti ai quattro stati dell’evoluzione che implementano il comportamento descritto. 7 (30’) 6 % Definite le 4 classi precedenti creare in un mazzo di carte di 6 Pokemon diversi alla prima evoluzione (nomi e valori casuali per energia e potenza d’attacco). Per 10 volte (generando due numeri casuali) scegliere una carta N. a caso dal mazzo e scegliere l’attività tra le quattro previste invocando il metodo corrispondente sulla carta selezionata. Se si invoca il metodo evolversi(), la nuova carta dovrà essere aggiunta al mazzo di carte senza rimpiazzare la carta che l’ha generata (il metodo evolve() ritorna un Pokemon). 7 8 (30’) % Pagina 2 di 2