Java SE 7 - · PDF fileCasting (2) Il casting implicito fra tipi primitivi deve essere fatto...

23
Java SE 7 Strutture di programmazione (2) [email protected] [email protected]

Transcript of Java SE 7 - · PDF fileCasting (2) Il casting implicito fra tipi primitivi deve essere fatto...

Page 1: Java SE 7 - · PDF fileCasting (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'è

Java SE 7Strutture di programmazione (2)

[email protected]@gmail.com

Page 2: Java SE 7 - · PDF fileCasting (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'è

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

Page 3: Java SE 7 - · PDF fileCasting (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'è

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 primitiviint i;long l;l = i; // casting implicito

i = (int) l; // casting esplicito

non rischiamo di perdere il valore perchè i è sicuramente contenuto in l

rischiamo di perdere il valore di l perchè potrebbe essere non contenibile in una variabile intera

Page 4: Java SE 7 - · PDF fileCasting (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'è

Casting (3)

int n1 = 100; int n2 = 130; byte b1 = n1; //casting implicito - errore in compilazione

byte b1 = (byte)n1; // byte può contenere valori byte b2 = (byte)n2; // da -128 a +127

System.out.println("Conversione di n1" + b1);// stampa 100

System.out.println("Conversione di n2" + b2);// stampa -126

Esempio di conversione di tipo con perdita del valore:

Page 5: Java SE 7 - · PDF fileCasting (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'è

Operatore ternarioLa 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";

Page 6: Java SE 7 - · PDF fileCasting (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'è

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.

Page 7: Java SE 7 - · PDF fileCasting (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'è

Controllo del flusso - IF ... ELSEL'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

Page 8: Java SE 7 - · PDF fileCasting (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'è

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}

Page 9: Java SE 7 - · PDF fileCasting (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'è

Esercizio J08

Creare un progetto chiamato J08Condizionale che testa se un numero inserito è inferiore superiore o pari a 10.

Page 10: Java SE 7 - · PDF fileCasting (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'è

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.

Page 11: Java SE 7 - · PDF fileCasting (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'è

Controllo del flusso - WHILEIl ciclo WHILE ripete un'istruzione o un blocco di istruzioni fino a quando una condizione rimane vera.

SINTASSIwhile (condizione) { istruzioni da ripetere}

ESEMPIO 1int k = 0;while (k<10) { System.out.println(k); k++;}

ESEMPIO 2boolean b = true;int k=0;while (b) { //operazioni con k... if (k==10) b=false;}

Page 12: Java SE 7 - · PDF fileCasting (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'è

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: 3Tabella dei prodotti da 1 a 10:3 6 9 12 15 18 21 24 27 30

Page 13: Java SE 7 - · PDF fileCasting (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'è

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

Page 14: Java SE 7 - · PDF fileCasting (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'è

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.

Page 15: Java SE 7 - · PDF fileCasting (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'è

Controllo del flusso - DO WHILEIl 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.

SINTASSIdo { istruzioni da ripetere} while (condizione);

ESEMPIOint k = 0;do { System.out.println(k); k++;}while (k<10) ;

Page 16: Java SE 7 - · PDF fileCasting (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'è

Controllo del flusso - FOR

Il ciclo FOR serve per effettuare cicli di lunghezza determinata.

SINTASSIfor (inizio;condizione;incremento) { istruzioni da eseguire}

ESEMPIOfor (int i=0;i<10;i++) { System.out.println(i);}

Page 17: Java SE 7 - · PDF fileCasting (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'è

Esercizio J13

Creare un programma J13Fattoriale che visualizzi il fattoriale di un numero inserito da tastiera.

Esempio di outputNumero inserito: 3Fattoriale: 6

Nota: il fattoriale di 3 è dato da 1*2*3

Page 18: Java SE 7 - · PDF fileCasting (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'è

Esercizio J14Scrivere un programma J14Albero che stampi il seguente triangolo con gli asterischi

**********

Modificare il programma in modo che disegni il triangolo nel seguente modo.

* *** ***** ****************

Page 19: Java SE 7 - · PDF fileCasting (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'è

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++;}

Page 20: Java SE 7 - · PDF fileCasting (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'è

Controllo del flusso - SWITCHL'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.

SINTASSIswitch(valoreEsaminato) { case valore1: istruzioni break; case valore2: ... default: istruzioni}

ESEMPIOswitch(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");}

Page 21: Java SE 7 - · PDF fileCasting (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'è

Esercizio J15Creare un programma J15Menu che visualizzi un menu e consenta all'utente di scegliere l'operazione da effettuare.

Esempio di output

Scegli un colore:1. rosso2. verde3. blu4. 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.

Page 22: Java SE 7 - · PDF fileCasting (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'è

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

Page 23: Java SE 7 - · PDF fileCasting (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'è

Esercizio J17

Creare un programma J17Pitagora che stampa a video la tavola pitagorica