Sei sulla pagina 1di 12

Esercitazione 4

c 2016 Mauro Ferrari v. 16.10.27 Esercitazione 4 26


Esercizio: ConversioneDaStringaAIntero2

Scriviamo unapplicazione che legga in ingresso un numero intero come


stringa, lo conveta nellint corrispondente ne visualizzi il valore.
Formato input
sequenza di cifre
eventualmente preceduta da + o -
eventualmente con spazi allinizio e alla fine

Esempio di esecuzione
> java ConversioneDaStringaAIntero2
Inserisci la stringa che rappresenta il numero intero> -123
Valore = -123
> java ConversioneDaStringaAIntero2
Inserisci la stringa che rappresenta il numero intero> 1a
Il formato dellinput non `
e corretto!

Versione di ConversioneDaStringaAIntero che utilizza i metodi statici


della classe Character.
c 2016 Mauro Ferrari v. 16.10.27 Esercitazione 4 27
Soluzione: ConversioneDaStringaAIntero2.java (1)

String stringa = in.readLine("Inserisci la stringa che "


+ "rappresenta il numero intero> ");

// rimuoviamo gli spazi allinizio e alla fine dellinput


stringa = stringa.trim();

// controlliamo la presenza del segno e decidiamo il segno


boolean numeroNegativo;
if (stringa.charAt(0) == +) {
numeroNegativo = false;
stringa = stringa.substring(1); // rimuoviamo il segno
} else if (stringa.charAt(0) == -) {
numeroNegativo = true;
stringa = stringa.substring(1); // rimuoviamo il segno
} else
numeroNegativo = false;

...

Come nella versione precedente.

c 2016 Mauro Ferrari v. 16.10.27 Esercitazione 4 28


Soluzione: ConversioneDaStringaAIntero2.java (2)

...
// Controlliamo il formato dellinput
boolean formatoCorretto = true;
if (stringa.length() == 0)
formatoCorretto = false;
else
for (int i = 0; i < stringa.length() && formatoCorretto; i++)
if (!Character.isDigit(stringa.charAt(i)))
formatoCorretto = false;
...

public static boolean isDigit(char ch)


Resituisce true se il carattere specificato rappresente una cifra.

public static int getNumericValue(char ch)


Restituisce il valore int rappresentato dal carattere specificato (nel caso dei
digit `e il valore della cifra).

c 2016 Mauro Ferrari v. 16.10.27 Esercitazione 4 29


Soluzione: ConversioneDaStringaAIntero2.java (3)
if (!formatoCorretto)
out.println("Il formato dellinput non e
` corretto!");
else { // convertiamo linput (variablile risultato)
int risultato = 0;

for ( int i = 0, moltiplicatore = 1; i < stringa.length();


i++, moltiplicatore = moltiplicatore * 10
)
{
// preleviamo il carattere a i posizioni dalla fine della stringa
char carattereDaTrattare = stringa.charAt((stringa.length() - 1) - i);

// convertiamolo la cifra in intero


int valoreCifra = Character.getNumericValue(carattereDaTrattare);

//aggiorniamo il valore del risultato


risultato = risultato + valoreCifra * moltiplicatore;
}

if (numeroNegativo)
risultato = -risultato;
out.println("Valore = " + risultato);
}
c 2016 Mauro Ferrari v. 16.10.27 Esercitazione 4 30
Esercizio Array1

Si scriva unapplicazione che:


costruisca un array di int di dieci posizioni;
riempia tali posizioni con interi generati a caso (si utilizzi la classe
java.util.Random);
visualizzi i valori contenuti nellarray.

Esempio di esecuzione
> java Array1
417475667
717122476
472848048
-268359629
-663114803
-885759211
-419016561
2110199115
1690160899
-1888961182

c 2016 Mauro Ferrari v. 16.10.27 Esercitazione 4 31


Soluzione: Array1.java

import java.util.Random;

...

public static void main(String[] args) {


ConsoleOutputManager out = new ConsoleOutputManager();

int[] array = new int[10];

//costruiamo un generatore di numeri random


Random generatore = new Random();

// inizializziamo le posizioni dellarray


for (int i=0; i<array.length; i++ )
array[ i ] = generatore.nextInt();

// stampiamo larray
for (int i=0; i<array.length; i++ )
out.println(array[i]);

c 2016 Mauro Ferrari v. 16.10.27 Esercitazione 4 32


Esercizio: Array2

Si modifichi lapplicazione precedente in modo che:


lutente fornisca la dimensione dellarray;
le posizioni dellarray siano riempiti con valori interi pseudo-casuali compresi fra 0
e un valore massimo specificato dallutente.

Esempio di esecuzione
> java Array2
Inserisci la dimensione dellarray> 5
Inserisci il valore massimo da generare> 20
17
0
8
2
10

c 2016 Mauro Ferrari v. 16.10.27 Esercitazione 4 33


Array2.java

...
//leggiamo i valori richiesti
int dimensione = in.readInt("Inserisci la dimensione... > ");
int valore_max = in.readInt("Inserisci il valore max... > ");

int[] array = new int[dimensione];

//costruiamo un generatore di numeri random


Random generatore = new Random();

// inizializziamo le posizioni dellarray


for (int i=0; i<array.length; i++ )
array[ i ] = generatore.nextInt(valore_max);

// stampiamo larray
for (int i=0; i<array.length; i++ )
out.println(array[i]);
...

c 2016 Mauro Ferrari v. 16.10.27 Esercitazione 4 34


Esercizi: Array3

Si modifichi lapplicazione precedente in modo che:


le posizioni dellarray siano riempite con valori interi pseudo-casuali positivi e
negativi con valore assoluto minore di un valore specificato dallutente.

Esempio di esecuzione
> 5
Inserisci lestremo del range dei valori > 100
65
-29
-79
-5
-65

c 2016 Mauro Ferrari v. 16.10.27 Esercitazione 4 35


Array3.java
...
//leggiamo i valori richiesti
int dimensione = in.readInt("Inserisci la dimensione... > ");
int valore_max = in.readInt("Inserisci il valore max... > ");

int[] array = new int[dimensione];


//costruiamo un generatore di numeri random
Random generatore = new Random();

// inizializziamo le posizioni dellarray


for (int i=0; i<array.length; i++ ) {
boolean positivo = generatore.nextBoolean();
int valore_generato = generatore.nextInt(valore_max);
array[ i ] = positivo ? valore_generato : - valore_generato;
}

// stampiamo larray
for (int i=0; i<array.length; i++ )
out.println(array[i]);
...
c 2016 Mauro Ferrari v. 16.10.27 Esercitazione 4 36
Esercizio sulle espressioni

int[] a;
int i;
double[] b;
double d;

Per ognuna delle seguenti espressioni, stabilire se viene accettata dal compilatore
e, nel caso lo sia, se possono verificarsi errori in fase di esecuzione.

(1) a[(int) d] = a[i]/(int)d


(2) b[d] = a[i]/(int)d
(3) b[i] = a[i]/d
(4) a[(int) d] = a[i]/d
(5) b[i] = (a[i] = a[i+1])
(6) a[i] = a.length

c 2016 Mauro Ferrari v. 16.10.27 Esercitazione 4 37