DOMANDA 1
Dato il seguente pseudocodice:
do the following 5 times
roll the die
add value to total
Quale istruzione implementa il ciclo?
● for con i = 5
● while
● do
● for con i <= 5
DOMANDA 2
Dato il seguente ciclo:
for (int i = 20; i <= 2; i = i - 6)
Quali valori assume i?
RISPOSTA: Nessuno — il ciclo non viene mai eseguito
DOMANDA 3
Data la seguente espressione con operatore ternario:
q = p % 4 != 0 ? (p % 4) : 4;
Quanto vale q se p=9?
RISPOSTA: q = 1
L'operatore ternario funziona così:
condizione ? valore_se_vera : valore_se_falsa
DOMANDA 4
I file compilati Java hanno estensione?
● .java
● .class
● .exe
● .jar
DOMANDA 5
Come si dichiara una costante in un metodo (in Java)?
RISPOSTA: final tipo NOME = valore;
In Java una costante locale (dentro un metodo) si dichiara con la keyword final:
final int MAX_VALORE = 100;
final double PI = 3.14159;
DOMANDA 6
Dato il seguente metodo ricorsivo:
public int mistery(int n, int m) {
if (n == 0)
return 1;
if (n == 1)
return m;
return n + mistery(n - 1, m);
Cosa restituisce mistery(1, 5)?
RISPOSTA: 5
Con n = 1 si entra direttamente nel secondo caso base:
mistery(1, 5)
→ n == 1 → return m → return 5
Nessuna ricorsione viene attivata — la funzione restituisce subito m, che vale 5.
Vale la pena capire anche gli altri casi per completezza:
● mistery(0, 5) → restituisce 1 (primo caso base)
● mistery(2, 5) → 2 + mistery(1, 5) = 2 + 5 = 7
● mistery(3, 5) → 3 + mistery(2, 5) = 3 + 7 = 10
In generale per n >= 2 calcola: n + (n-1) + ... + 2 + m — una somma
decrescente fino a raggiungere il caso base n == 1.
DOMANDA 7
Data la seguente classe:
public class MyClass {
public void methodA(String s) {
s = "987"; }
public void methodB() {
String val = "xyz";
methodA(val);
[Link](val);
}}
L'esecuzione di methodB() cosa provoca sullo standard output?
RISPOSTA: stampa xyz
Questo è un esempio classico del passaggio per valore in Java.
Passo Cosa succede
val = "xyz" val punta alla stringa "xyz"
methodA(val) viene passata una copia del riferimento a "xyz"
s = "987" dentro methodA s (la copia locale) viene fatta puntare a "987"
si torna in methodB val punta ancora a "xyz" — non è cambiata
println(val) stampa xyz
⚠️ Trappola fondamentale: in Java le String sono immutabili e i riferimenti
vengono passati per valore. Dentro methodA si riassegna solo la variabile
locale s, non l'oggetto a cui punta val in methodB. Per modificare val
dall'esterno bisognerebbe usare un tipo mutabile (es. StringBuilder)
oppure restituire il nuovo valore con return.
DOMANDA 8
Data la seguente classe:
public class MyClass {
public void methodA(String s) {
s = "987"; }
public void methodB() {
String val = "xyz";
methodA(val);
[Link](val);
}}
L'esecuzione di methodA() cosa provoca sullo standard output?
RISPOSTA: nulla — nessun output
methodA si limita a riassegnare la variabile locale s, ma non contiene nessuna istruzione di
stampa ([Link] o simili).
Elemento Presente in methodA?
[Link] ❌
[Link] ❌
Qualsiasi output ❌
Nota: la println si trova solo in methodB, e stampa val dopo la chiamata a
methodA — non durante. Chiamando methodA direttamente, sullo standard
output non appare assolutamente nulla.
DOMANDA 9
Qual è il metodo per verificare se 2 riferimenti a oggetti sono identici in Java?
RISPOSTA: l'operatore ==
In Java esistono due modi per confrontare oggetti, con significati molto diversi:
Metodo Cosa confronta
== Se i due riferimenti puntano allo stesso oggetto in memoria
.equals() Se i due oggetti hanno lo stesso contenuto/valore
Esempio chiarificatore:
String a = new String("ciao");
String b = new String("ciao");
String c = a;
[Link](a == b); // false → oggetti diversi in memoria
[Link]([Link](b)); // true → stesso contenuto
[Link](a == c); // true → stesso riferimento
⚠️ Trappola frequente: usare == per confrontare stringhe o oggetti pensando di
confrontare il valore. Per il contenuto si usa sempre .equals(), per l'identità
(stesso oggetto) si usa ==.
DOMANDA 10
Cosa provoca l'operazione a / 0 in Java?
RISPOSTA: dipende dal tipo di a
In Java il comportamento cambia a seconda che a sia intero o in virgola mobile:
Tipo di a Risultato
int / long Lancia ArithmeticException a runtime con messaggio "/
by zero"
float / Non lancia eccezione — restituisce Infinity (o NaN se 0.0
double / 0.0)
Esempi:
int a = 10;
[Link](a / 0); // → ArithmeticException: / by zero
double b = 10.0;
[Link](b / 0.0); // → Infinity
double c = 0.0;
[Link](c / 0.0); // → NaN
⚠️ Se la domanda non specifica il tipo, la risposta attesa è quasi
certamente ArithmeticException — che è il caso intero, il più comune
in un contesto scolastico.
DOMANDA 11
ArrayList e LinkedList hanno la stessa...?
● a) struttura interna di memorizzazione
● b) interfaccia (List)
● c) velocità di accesso agli elementi
● d) occupazione di memoria
DOMANDA 12
Qual è la migliore strategia per gestire coesione e accoppiamento in Java?
● a) alta coesione, alto accoppiamento
● b) bassa coesione, basso accoppiamento
● c) alta coesione, basso accoppiamento
● d) bassa coesione, alto accoppiamento
DOMANDA 13
Quale metodo modifica l'oggetto sul quale è invocato?
● a) [Link]()
● b) [Link]()
● c) [Link]()
● d) [Link]()
DOMANDA 14
Dato il seguente codice:
public class Parent {
public String toString() {
return "I'm the parent";
public class Child extends Parent {
public String toString() {
return "I'm the child";
public static void main(String[] args) {
Parent p = new Child();
[Link](p);
Cosa stampa [Link](p)?
● a) "I'm the parent"
● b) "I'm the child"
● c) Errore di compilazione
● d) Errore a runtime
RISPOSTA: b) "I'm the child"
SPIEGAZIONE DETTAGLIATA
1 — Ereditarietà (extends) Child estende Parent, quindi eredita tutti i suoi metodi. È una
relazione "Child è un Parent".
2 — Override di toString() Child ridefinisce toString() con una propria versione. Quando Java
cerca quale toString() chiamare, usa quella della classe reale dell'oggetto, non quella
dichiarata.
3 — La riga chiave:
Parent p = new Child();
Codice Significato
Parent p Il tipo dichiarato del riferimento è Parent
new L'oggetto reale creato in memoria è un
Child() Child
Questa è una delle forme base del polimorfismo in Java.
4 — [Link](p) println chiama automaticamente toString()
sull'oggetto passato. Java usa il dynamic dispatch (binding dinamico): guarda il tipo
reale dell'oggetto a runtime (Child), non il tipo dichiarato (Parent), e chiama la
toString() di Child → stampa "I'm the child".
⚠️ Trappola: si potrebbe pensare che essendo p dichiarato come Parent,
usi il suo toString(). Sbagliato — in Java il metodo eseguito dipende
sempre dall'oggetto reale, non dal tipo del riferimento. Questo è
esattamente il cuore del polimorfismo.