Java SE 7 Strutture di programmazione (2) diegozabot@yahoo.it ursula.castaldo@gmail.com
Casting (1) E' l'operazione che realizza la conversione di tipo tra oggetti e tra tipi primitivi. E' un'operazione consentita tra due tipi primitivi (int e float, ad esempio) o tra due oggetti legati da un legame di ereditarietà. Non è consentita tra un tipo primitivo e un oggetto o tra due oggetti senza legame di ereditarietà. Il casting può essere implicito o esplicito
Casting (2) Il casting implicito fra tipi primitivi deve essere fatto andando da tipi che occupano meno memoria a tipi che ne occupano di più, altrimenti c'è errore di compilazione. Il casting esplicito ci consente libertà maggiore, ma a nostro rischio. Esempio di casting tra tipi primitivi int i; long l; non rischiamo di perdere il l = i; // casting implicito valore perchè i è sicuramente contenuto in l i = (int) l; // casting esplicito rischiamo di perdere il valore di l perchè potrebbe essere non contenibile in una variabile intera
Casting (3) Esempio di conversione di tipo con perdita del valore: int n1 = 100; int n2 = 130; byte b1 = n1; //casting implicito - errore in compilazione byte b1 = (byte)n1; byte b2 = (byte)n2; // byte può contenere valori // da -128 a +127 System.out.println("Conversione di n1" + b1); // stampa 100 System.out.println("Conversione di n2" + b2); // stampa -126
Operatore ternario La forma dell'operatore ternario è: x = condizione? severo : sefalso; Questo operatore è ritorna un valore oppure un altro valore a seconda di una condizione. Il primo operando è la condizione, di conseguenza deve essere una espressione che viene valutata ad un valore booleano. Il secondo e il terzo operando invece sono il risultato finale: se primo operando viene valutato a vero, si ottiene come risultato il secondo operando, se viene valutato falso, si ottiene come risultato il terzo operando. Il secondo e il terzo operando devono essere dello stesso tipo, o almeno convertibili allo stesso tipo. Es. String s = (n % 2 == 0)? "Numero pari" : "Numero dispari";
Esercizio J07 Nome progetto: J07PariDispari Scrivere un programma che utilizzi l'operatore ternario, che prenda un valore come input, e determini se è pari o dispari.
Controllo del flusso - IF... ELSE L'istruzione "if" consente di fare eseguire una porzione di codice solo nel caso in cui una condizione prestabilita si realizzi; altrimenti ne viene eseguita un'altra (opzionale) SINTASSI if (condizione) { // blocco istruzioni } if (condizione) { // blocco istruzioni 1 } else { // blocco istruzioni 2 } Il blocco di istruzioni viene eseguito solo se si avvera la condizione. Il blocco istruzioni 1 si realizza solo quando viene soddisfatta la condizione, altrimenti (else) viene eseguito il blocco istruzioni 2
Controllo del flusso - IF... ELSE IF... ELSE Tramite il costrutto if... else if... posso creare una serie di condizioni, che vengono verificate sequenzialmente una dopo l'altra. SINTASSI if (condizione 1) { // blocco istruzioni 1 } else if (condizione 2) { // blocco istruzioni 2 } else if (condizione 3) { // blocco istruzioni 3 } else { // blocco istruzioni 4
Esercizio J08 Creare un progetto chiamato J08Condizionale che testa se un numero inserito è inferiore superiore o pari a 10.
Esercizio J09 Creare un progetto di nome J09CicloWhile dove si stampa un contatore che va da 0 a 9. Approfondimento: effettuare un ciclo while utilizzando un test con una variabile boolean.
Controllo del flusso - WHILE Il ciclo WHILE ripete un'istruzione o un blocco di istruzioni fino a quando una condizione rimane vera. SINTASSI while (condizione) { istruzioni da ripetere } ESEMPIO 1 int k = 0; while (k<10) { System.out.println(k); k++; } ESEMPIO 2 boolean b = true; int k=0; while (b) { //operazioni con k... if (k==10) b=false; }
Esercizio J10 Creare un programma J10Tabelline che mi mostri la tabellina da 1 a 10 dei prodotti di un numero inserito da tastiera. Esempio di output: Numero inserito: 3 Tabella dei prodotti da 1 a 10: 3 6 9 12 15 18 21 24 27 30
Esercizio J11 Creare un programma J11Sommatoria che sommi tutti i valori inseriti fino a che non si inserisce uno 0. Esempio: input: 1 2 3 4 5 risultato: 15
Esercizio J12 Creare un programma che "pensa a un numero" e chiede all'utente di indovinare il numero pensato. Il programma chiede di inserire un nuovo numero fin quando l'utente non lo indovina, dando informazioni sul numero inserito (troppo grande, troppo piccolo). Nome programma: J12Indovina.
Controllo del flusso - DO WHILE Il ciclo DO-WHILE ripete un'istruzione o un blocco di istruzioni fino a quando una condizione rimane vera; si differenzia dal ciclo WHILE per l'ordine in cui esegue le operazioni previste. Infatti, prima si eseguono le istruzioni, poi si valuta la condizione. Le istruzioni vengono eseguito almeno una volta. SINTASSI do { istruzioni da ripetere } while (condizione); ESEMPIO int k = 0; do { System.out.println(k); k++; }while (k<10) ;
Controllo del flusso - FOR Il ciclo FOR serve per effettuare cicli di lunghezza determinata. SINTASSI for (inizio;condizione;incremento) { istruzioni da eseguire } ESEMPIO for (int i=0;i<10;i++) { System.out.println(i); }
Esercizio J13 Creare un programma J13Fattoriale che visualizzi il fattoriale di un numero inserito da tastiera. Esempio di output Numero inserito: 3 Fattoriale: 6 Nota: il fattoriale di 3 è dato da 1*2*3
Esercizio J14 Scrivere un programma J14Albero che stampi il seguente triangolo con gli asterischi * ** *** **** Modificare il programma in modo che disegni il triangolo nel seguente modo. * *** ***** ******* *********
Controllo del flusso - BREAK E' possibile interrompere l'esecuzione di un ciclo tramite l'istruzione break Esempio: int x=1; while (x<10) { if (x>3) break; System.out.println(x); x++; }
Controllo del flusso - SWITCH L'istruzione switch permette di eseguire istruzioni diverse in base al risultato di un confronto, che avviene tra il valore fornito e quelli indicati nelle varie clausole case. È necessario inserire la keyword break per interrompere il confronto. I valori di confronto devono essere di tipo primitivo convertibili a int. SINTASSI switch(valoreesaminato) { case valore1: istruzioni break; case valore2:... default: istruzioni } ESEMPIO switch(scelta) { case 1: System.out.println("Scelta 1"); break; case 2: System.out.println("Scelta 2"); break; default: System.out.println("Nè 1 nè 2"); }
Esercizio J15 Creare un programma J15Menu che visualizzi un menu e consenta all'utente di scegliere l'operazione da effettuare. Esempio di output Scegli un colore: 1. rosso 2. verde 3. blu 4. esci Se l'utente sceglie uno dei colori (es. rosso) deve venir visualizzato il testo "Hai scelto il rosso". Se l'utente sbaglia (non sceglie nè 1, nè 2, nè 3, nè 4) deve apparire il testo "Scelta non consentita". Miglioramento: fare in modo che il menu e la possibilità di scelta continuino fino a quando l'utente non inserisce 4.
Esercizio J16 Progetto: Macchina del caffè Sviluppare un programma che simuli il comportamento di una macchina erogatrice di caffè. 1. accetta soldi da utente (inserisce soldi finchè non inserisce il numero 0) 2. mostra il menu con i relativi prezzi e attende la scelta dell'utente 3. Tre casi: se i soldi sono giusti procede all'erogazione del caffè se sono pochi avvisa che mancano e attende altri se ce ne sono di più visualizza il resto
Esercizio J17 Creare un programma J17Pitagora che stampa a video la tavola pitagorica