Esercizio 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
Bassa
metodo_1
è sovrascritto;
metodo_2
è un sovraccaricamento;
metodo_3
dà errore, perché non si puņ sovrascrivere un metodo
statico con uno non statico;
metodo_4
costituisce un sovraccaricamento del metodo di classe, legittimo
ma sconsigliabile.
Si veda la classe Alta.java.
SubBase sb = new SubBase(10);
.
I parametri nel costruttore non sono corretti. Infatti la sottoclasse SubBase
eredita solo il costruttore di default dalla superclasse, ovvero il costruttore senza parametri.
Per rimediare occorre definire il costruttore della sottoclasse che accetta un parametro di tipo
int
, ad esempio public SubBase(int i) {}
Si veda la classe Test.java.
La sequenza è la successione dei numeri dispari.
Ogni numero si ottiene dal precedente sommando 2
.
Quindi il passo base della funzione ricorsiva sarà
if (n == 0) return 1;
, mentre il passo induttivo
return 2 + f(n-1)
.
Si veda la classe Test3.java.
14 1 5 4 - + / 2 1 + + 2 *e rappresentato sinteticamente, è il seguente:
stack: | 4 | ||||||||||||
5 | 5 | 1 | 1 | ||||||||||
1 | 1 | 1 | 1 | 2 | 2 | 2 | 3 | 2 | |||||
14 | 14 | 14 | 14 | 14 | 14 | 7 | 7 | 7 | 7 | 10 | 10 | 20 | |
token: | |||||||||||||
14 | 1 | 5 | 4 | - | + | / | 2 | 1 | + | + | 2 | * |
incompatible types
. Un
oggetto della classe Studente
non è necessariamente anche della
classe Dottorando
, quindi questa istruzione č un assegnamento non corretto;
Dottorando
è
anche della classe Studente
, quindi può essere passato
come parametro implicito al metodo esami_sostenuti()
della classe
Studente
, che viene ereditato;
s
non è stato istanziato.
Lecito, invece, in quanto visibilità.
s
,
si effettua un cast
al tipo Dottorando
, come nel codice:
((Dottorando)s).dottorato = "fisica";
tutoraggio
non è
stato istanziato. Lecito per quanto riguarda la visibilità, essendo
tutoraggio
un membro della classe Dottorando
dichiarato
come tipo array di oggetti di tipo Studenti
.
Il ciclo viene compilato ma non viene eseguito e solleva un'eccezione a runtime,
in particolare una java.lang.NullPointerException
.
Infatti, le singole posizioni dell'array non sono state istanziate e
perciò contengono il valore iniziale di default null
.
Non si può quindi inviare il messaggio (concat
)
a un oggetto inesistente.
public Object pop() { if (cima == null) throw new PilaVuotaException(); else { Object risultato = cima.dato; cima = cima.pros; return risultato; }
public class PilaVuotaException extends RuntimeException { }
public void aggiungi(Object x) { //creazione del nuovo nodo Nodo t = new Nodo(); t.dato = x; t.pros = null; //inserimento del nodo if (primo == null) //caso di coda inizialmente vuota primo = ultimo = t; else { //caso di coda non vuota ultimo.pros = t; //collega il nuovo nodo dopo l'ultimo ultimo = t; //aggiorna il riferimento ultimo } }
public boolean hasNext() { if (indice == anno.length) return false; else return true; } public Object next() { return (Object)anno[indice++]; } public int mese() { return indice + 1; }
funzione
:
funzione ([ a b c ]) return 1 + funzione ([ b c ]) ^3 return 1 + funzione ([ c ]) ^2 return 1 + funzione ([ ]) ^1 return 0 ^0
funzione
calcola la lunghezza della lista passata in input
(ad esempio [ a b c ]
), dapprima avanzando
con le chiamate ricorsive successive, che vengono impilate sullo stack delle chiamate
fino a quella con la lista vuota come parametro ([ ]
), quindi disallocando
le chiamate e riportando all'ambiente chiamante 1 + il valore ricevuto dalla chiamata appena conclusa.
Esercizio 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11