Esercitazione 2


Generazione di valori pseudocasuali

Il metodo Math.random() restituisce un double casuale compreso nell'intervallo [0, 1), incluso il valore 0 ed escluso il valore 1

Se v è una variabile double, è possibile assegnarle un valore casuale attraverso l'assegnazione v = Math.random();
oppure usare Math.random() all'interno di una espressione più complessa

Ogni volta che verra chiamato il metodo Math.random() sarà restituito, con altissima probabilità, un valore differente.

  1. Scrivere un programma che visualizza un valore casuale double compreso nell'intervallo [0, 100) (suggerimento: moltiplicare ...).
  2. Scrivere un programma che visualizza un valore casuale intero compreso nell'insieme {0, 1, 2, 3, 4, 5} (suggerimento: moltiplicare ed eseguire una conversione esplicita a intero...).
  3. Scrivere un programma che visualizza un valore casuale intero compreso nell'insieme {1, 2, 3, 4, 5, 6}.
  4. Eseguire ripetutamente i programmi scritti per verificarne il corretto funzionamento.

Output formattato con System.out.printf(...)

Il metodo System.out.printf(...), introdotto nelle versioni più recenti del linguaggio Java, permette di visualizzare valori numerici e stringhe utilizzando un numero prefissato di caratteri, o di intervenire sul numero di decimali o sulla presenza dei separatori per le migliaia.

In tal modo si risolvono semplicemente alcuni inconvenienti di allineamento, come ad esempio nella stampa della sequenza seguente:

1
2
4
8
16
32
64
128
che vorremmo ottenere incolonnata come segue
   1
   2
   4
   8
  16
  32
  64
 128
Per ottenere il risultato correttamente incolonnato dovremmo stampare ciascun valore intero utilizzando esattamente 4 spazi, ad esempio 3 spazi e una cifra, oppure due spazi e due cifre, oppure uno spazio e tre cifre. Un altro uso comune del metodo riguarda la limitazione del numero di cifre decimali quando si stampano valori double e float, se si vuole visualizzare ad esempio
3.333
invece di
3.3333333333333335

Sintassi della chiamata del metodo System.out.printf(...)

Il metodo System.out.printf(...) può essere invocato con un numero variabile di parametri, di cui il primo è una stringa di formato, e i successivi sono espressioni qualsiasi.

System.out.printf(stringa di formato, espressione, espressione, ..., espressione)

La stringa di formato è una stringa che contiene caratteri qualsiasi, caratteri speciali come \n per tornare a capo, ed eventuali specifiche di formato

System.out.printf("la media vale %f", media); System.out.printf("la somma vale %d\n mentre la media vale %f", somma, media); È possibile utilizzare numerose specifiche di formato, di cui le più utili sono:

per ogni specifica di formato presente nella stringa di formato deve esserci una espressione di tipo adeguato tra i parametri successivi.

Effetto del metodo System.out.printf(...)

La chiamata al metodo causa la visualizzazione della stringa di formato, nella quale la prima specifica di formato viene sostituita con il valore della prima espressione, la seconda specifica di formato viene sostituita con il valore della seconda espressione, la terza specifica di formato viene sostituita con il valore della terza espressione, e così via.

Ad esempio, se somma è una variabile int e media è una variabile double, la chiamata

System.out.printf("la somma vale %d e la media vale %f\n", somma, media);

causa la visualizzazione del testo seguente:

la somma vale XXXX e la media vale YYYY

dove XXXX e YYYY sono rispettivamente il contenuto delle variabili somma e media

È possibile indicare il numero di caratteri da utilizzare per la visualizzazione di ciascun valore modificando come segue le specifiche di formato:

Ad esempio, se la variabile somma contiene il valore 25 e la variabile media contiene il valore 12.5, la chiamata

System.out.printf("la somma vale %5d e la media vale %6.2f\n", somma, media);

causa la visualizzazione del testo seguente:

la somma vale    25 e la media vale  12.50