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