public class Counter {
public static int getCount(String[] arr) {
int count = 0;
for (String var : arr) {
if (var != null)
count++;
}
return count;
}
public static void main(String[] args) {
String[] arr = new String[4];
arr[1] = "C";
arr[2]
= "";
arr[3]
= "Java";
assert (getCount(arr)
< arr.length);
System.out.print(getCount(arr));
}
}And the commands:
javac Counter.java
java ‘ea Counter
What is the result?
A.
2
B.
3
C.
NullPointException is thrown at runtime
D.
AssertionError is thrown at runtime
E.
Compilation fails
Risposta B
Il codice compila e quindi la E è falsa
. Quando si eseguono i comandi si fa prima una compilazione con javac e poi un
lancio con java. Il parametro ea serve ad attivare le asserzioni. Da eclipse si
può fare la stessa cosa scrivendo –ea
in Run Configurations – Arguments – Parametri VM .
Se non si attivano le asserzioni queste
saranno ignorate.
Il flusso del programma è :
1) Si
crea un array lungo 4
2) Si
inseriscono 3 elementi nelle posizioni 1,2 e 3 e si lascia l’elemento 0 a null.
3) Il
metodo getCount conta gli elementi non nulli dell’array, quindi 3.
4) L’asserzione
verifica che questo conto (3) sia minore
della lunghezza dell’array (4) . quindi l’asserzione è verificata e il flusso
procede oltre.
5) Alla
fine si stampa il conto e quindi si ha la stampa del numero 3.
Per vedere cosa succede se l’asserzione non è
verificata si può aggiungere un elementi non nullo in posizione 0 : arr[0]
= "C"; ,
oppure cambiare l’asserzione : assert (getCount(arr)
== arr.length); .
In questo caso l’asserzione non viene verificata e si ottiene il messaggio di
errore :
Exception
in thread "main" java.lang.AssertionError
at Counter.main(Counter.java:16)
Riferimenti:
Nessun commento:
Posta un commento