mercoledì 6 novembre 2013

Q35

Given:

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 ConfigurationsArgumentsParametri 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