fondamenti di informatica 1 - uniroma2.it · interrompere la valutazione di tutti i case successivi...
TRANSCRIPT
Sommario
• Istruzione condizionale switch• Istruzioni di salto break e continue• Uso di variabili di tipo boolean
• Variabili di tipo array (monodimensionali)• Esercizi
Istruzione condizionale switch– Utile nei casi in cui occorre testare una
espressione (o variable ) in modo multiplo– Contiene una serie di etichette case per
ciascun caso ed un caso opzionale default
switch (espressione){case espr_costante1: System.out.println("Il valore dell’espressione è:
espr_costante1");break;
case espr_costante2:System.out.println("Il valore dell’espressione è: espr_costante2");
break;……………break;
default: System.out.println(" Il valore dell’espressione non è corretto"););
break; }
Dopo che viene valutata l’espressione scritta dopo la parola chiave switch, il controllo passa al primo case tale che espressione == espr_costante ed esegue il relativo blocco di codice. Nel caso in cui il blocco sia terminato con una istruzione break, viene abbandona l’esecuzione del blocco switch saltando alla prima istruzione successiva al blocco, altrimenti il controllo viene eseguito sui blocchi case a seguire. Se nessun blocco case soddisfa la condizione viene controllata l’esistenza della parola chiave default ed eseguito, se presente, solo il blocco di codice relativo e si esce da switch.
switch (i) {case v1: <istruzione 1>;break;case v2: <istruzione 2>;break;case v3: <istruzione 3>;break;……………..break;case vn: <istruzione n>;break;default:: <istruzione di default>; break;}
i è la variabile su cui avvengono tutti i confronti, mentre V1, V2,.. Vn sono variabili o costanti utilizzate per eseguire il confronto. Quando un'operazione di confronto risulta soddisfatta verrà eseguita l'istruzione corrispondente. Se nessuno dei confronti risulta verificato, viene eseguita l'istruzione presente nel ramo default.
Semantica switchtrue
false
.
.
.
case v1 case v1 istruzione 1
break
case v2 case v2 istruzione 2
break
false
false
case vn case vnistruzione n
break
true
true
default ….istrdefault
Istruzione di salto break
• L’istruzione di salto break abbinata all’istruzione switch serve per interrompere la valutazione di tutti i casesuccessivi a quello in cui si è verificato espressione == espr_costante
Semantica switch senza break
true
false
.
.
.
case v1 case v1 istruzione 1
case v2 case v2 istruzione 2
false
false
case vn case vnistruzione n
true
true
default ….istrdefault
true
switch (i) {case 1:System.out.println("lunedi'");break;case 2:System.out.println("martedi'");break;case 3:System.out.println("mercoledi'");break;case 4:System.out.println("giovedi'");break;case 5:System.out.println("venerdi'");break;case 6:System.out.println("sabato");break;case 7:System.out.println("domenica");break;default:System.out.println("valore errato");break;}
Supponendo di voler confrontare il valore di una variabile i di tipo intero con una serie di costanti da 1 a 7 (i giorni della settimana) possiamo scrivere:
switch (i){case 1: System.out.println("Il valore di i è: 1");break;case 2: System.out.println(" Il valore di i è: 2");break;case 3: System.out.println(" Il valore di i è: 3");break;default: System.out.println(" Il valore di i è non è 1, ne' 2, ne' 3, ma " +i);break; }
Lo stesso risultato si sarebbe ottenuto con una serie di if...else if ..else come segue:
if (i==1)System.out.println("Il valore di i è: 1");else if(i==2)
System.out.println("Il valore di i è: 2");else if (i==3)
System.out.println("Il valore di i è: 3");elseSystem.out.println("Il valore di i non è 1, ne' 2, ne' 3, ma " +i);
switch (i){case 1: System.out.println("Il valore di i è: 1");break;case 2: System.out.println(" Il valore di i è: 2");break;case 3: System.out.println(" Il valore di i è: 3");break;default: System.out.println(" Il valore di i è non è 1, ne' 2, ne' 3, ma " +i);break; }
Lo stesso risultato si sarebbe ottenuto con una serie di if...else if ..else come segue:
if (i==1)System.out.println("Il valore di i è: 1");else if(i==2)
System.out.println("Il valore di i è: 2");else if (i==3)
System.out.println("Il valore di i è: 3");elseSystem.out.println("Il valore di i non è 1, ne' 2, ne' 3, ma " +i);
L’istruzione switch ha una limitazione: il tipo di espressione deve restituire un valore intero od una costante di tipo enum (ancora da studiare)Non è quindi possibile utilizzarla con valori diversi es. String o boolean.
switch (car){case ’a’: System.out.println("Il valore di car è: a");break;case ’b’: System.out.println(" Il valore di car è : b");break;case ’c’: System.out.println(" Il valore di car è : c");break;default: System.out.println(" Il valore di i è non è a, ne' b, ne' c, ma " +car);break; }
Fa eccezione il tipo char, in quanto viene valutato il valore intero del carattere
int b=6;
switch (a+b) { case 11: a = 5;
break; case 15: a = 9; break;
default: b = 0; a = 0;break;
}
l’espressione scritta dopo la parola chiave switch, può essere di tipo qualsiasia….
Istruzione di salto break
• L’istruzione break serve per interrompere un ciclo– Nell’istruzione switch interrompe
l’esecuzione del blocco switch limitandola all’istruzioni del blocco corrispondente all’etichetta che eguaglia l’espressione che controlla il ciclo
Uso di break in forfor ( cont=1; cont<=10;cont++){if (cont == 5) break;// resto del blocco del for}
si
no
Contatore= 1
Contatore<=10 ? Contatore++Contatore=5 ?
Istruzione break
si
noResto del blocco for
Esce quando i = 5
int i,j;for( i=1;i<50;i++) {
for(j=2;j<i;j++)if(i%j==0) break;if(i==j) System.out.print(" "+i); }
si
no
j= 2
j<i j++i%j==0 ?
Istruzione break
si
noResto del blocco for
Esce quando (i%j==0)
..esempio determinare i numeri primi compresi tra 1 e 50…
Uso di break in whilewhile ( cont<=10){if (cont == 5) break;// resto del blocco del while}
si
no
Cont= 1
Cont<=10 ? Cont=5 ?
Istruzione break
si
noResto del blocco while
Esce quando cont = 5
Istruzione di salto continue
• L’istruzione continue interrompe il passo corrente del ciclo e continua ovvero riprende ad eseguire il passo successivo
Uso di continue in forfor ( cont=1; cont<10;cont++){if (cont == 5) continue;
// resto del blocco del for}
si
no
Contatore= 1
Contatore<10 ? Contatore++Contatore=5 ?
Istruzione continue
si
noResto del blocco for
Salta il caso i=5
Uso di continue in whilewhile ( cont<10){if (cont == 5) continue;
// resto del blocco del while}
si
no
Cont= 1
Cont<10 ? Cont=5 ?
Istruzione continue
si
noResto del blocco while
Salta il caso cont=5
Esercizio
Scrivere un programma che letta in input una stringa (nome della variabile mioTesto ) verifica se è palindroma (utilizzare break).
L’istruzione breakbreak: termina l’esecuzione del blocco break: termina l’esecuzione del blocco
dell’iterazione in cui compare.
InputStreamReader In = new InputStreamReader(System.in);BufferedReader Tastiera = new BufferedReader(In);
String mioTesto; boolean palindroma = true;System.out.println("inserire il teso : " );mioTesto= Tastiera.readLine();int sx,dx;for(sx=0, dx = mioTesto.length()-1; sx<dx; sx++,dx--)
{if(mioTesto.charAt(sx)!=mioTesto.charAt(dx)){palindroma = false;break;} }
System.out.println("Risultato : " + palindroma);
Variabili di tipo array Un array di dati è un insieme di dati omogenei,memorizzati in locazioni adiacenti e accessibili mediante unindice.
L’array implementa una corrispondenza (mapping) tra isuoi elementi e le locazioni di memoria che li contengono.
Variabili di tipo array Sintassi Java della fase di dichiarazione di un array di <dimensione intera>
locazioni in cui vengono inseriti dati del tipo specificato nel campo <tipo di dato>.
<tipo di dato> <variabile array> [ ] =
new <tipo di dato> [ <dimensione intera> ] ;
oppure
<tipo di dato> [ ]<variabile array> =
new <tipo di dato> [ <dimensione intera> ] ;
int [ ] I= new int[3] ;
int I[ ]= new int[3] ;
Variabili di tipo array Esempiint I[ ]= new int[3] ;// I è un array di 3 valori interi
char C[ ]= new char[4] ; // C è un array di 4 caratteri
boolean B[ ]= new boolean[3]; // B è un array di 3 valori logici
Dichiarazione e inizializzazione di array
Inizializzazione di un array nella fase dichiarativa:<tipo di dato> <variabile array> [ ] = { <elenco dei valori> };
Esempiint I[ ] = { 5,1,2}; // I è un array di 3 valori interichar C[ ] = { 'a', 'b','c','d' };// C è un array di 4 caratteriboolean B[ ] = { true,true,false }; // vb è un array di 3 valori logici
Esercizio
Scrivere un programma che memorizzi 10 intin un array e successivamente calcoli e stampi la somma degli elementi memorizzati.
import java.io.*;public class EsempioArray{
public static void main(String args[]) throws NumberFormatException, IOException{
int i=0;int v[]=new int[10];InputStreamReader In = new InputStreamReader(System.in);BufferedReader Tastiera = new BufferedReader(In);
for (i=0; i<10; i++){
System.out.print("Valore: v["+i+"]= “);v[i]=Integer.parseInt(Tastiera.readLine());
} for(i=0; i<10;i++){
System.out.println("v["+i+"]="+v[i]);}int S=0;for(i=0; i<x;i++){
S=S+v[i];}System.out.println("somma="+S);
}}
Esercizio
Scrivere un programma che memorizzi X (valore >0 letto da tastiera) int in un array v e successivamente calcoli e stampi la somma S degli elementi memorizzati.
int x; do{System.out.print("Immettere un numero: ");x=Integer.parseInt(Tastiera.readLine()); }while (x<=0); System.out.println("numero inserito: " + x);
int i=0;int v[]=new int[x];
for (i=0; i<x; i++){
System.out.print("Valore: ");v[i]=Integer.parseInt(Tastiera.readLine());
}
for(i=0; i<x;i++){
System.out.println("v["+i+"]="+v[i]);}
int S=0;for(i=0; i<x;i++){
S=S+v[i];}System.out.println("somma="+S);
Scrivere un programma che memorizzi un array A di K elementi di tipo double, e che successivamente calcoli e stampi il numero di elementi di A minori di zero.
Esercizio