Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf ·...

23
Programmazione II Lezione 8 Daniele Sgandurra [email protected] 12/11/2010 1/23 Programmazione II Lezione 8 12/11/2010

Transcript of Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf ·...

Page 1: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

Programmazione IILezione 8

Daniele Sgandurra

[email protected]

12/11/2010

1/23 Programmazione II Lezione 8 12/11/2010

Page 2: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

Sommario

1 JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

2/23 Programmazione II Lezione 8 12/11/2010

Page 3: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

Java

Parte I

Java

3/23 Programmazione II Lezione 8 12/11/2010

Page 4: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Tipi di Dato

Tipi primitivi: sono i tipi predefiniti del linguaggio. In Java:

int: tipo intero (a 32 bit): da -2.147.483.648 a +2.147.483.647;

short: tipo intero (a 16 bit): da -32.768 a +32.767;

long: tipo intero (a 64 bit): da -9.223.372.036.854.775.808 a+9.223.372.036.854.775.807;

byte: tipo intero (a 8 bit): da -128 a +127;

float: tipo a virgola mobile (a 32 bit): intervallo1,40129846432481707e-45 a 3,40282346638528860e+38(positivi/negativi);

double: tipo a virgola mobile (a 64 bit): intervallo4,94065645841246544e-324d a 1,79769313486231570e+308d(positivi/negativi);

boolean: valori true/false;

char: carattere Unicode.

4/23 Programmazione II Lezione 8 12/11/2010

Page 5: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Principali Operazioni Aritmetiche

+ somma;

* moltiplicazione;

- sottrazione;

/ divisione intera;

++ incremento (solo int);

-- decremento (solo int);

+= incremento con valore;

-= decremento con valore.

Applicabili solo a tipi primitivi numerici (int, float, etc.). Il significato diqueste operazioni cambia a seconda dei tipi a cui sono applicati. Esempio:

1 i n t a = 1 0 ;2 i n t b = 3 ;3 a/b ; // d i v i s i o n e i n t e r a4 f l o a t c = 1 0 ;5 f l o a t d = 3 ;6 c/d ; // d i v i s i o n e a v i r g o l a m o b i l e

5/23 Programmazione II Lezione 8 12/11/2010

Page 6: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Operatori Relazionali e Logici

Operatori relazionali:

<, <=, >=, >: minore stretto, minore o uguale, maggiore o uguale,

maggiore stretto:

applicabili solo a tipi primitivi numerici (non boolean).

== uguaglianza.

!= diseguaglianza.

Gli operatori di uguaglianza e diseguaglianza possono essere applicati a

qualunque tipo di dati (con un significato particolare):

per ora, ci interessa sapere che possono essere applicati a tutti i tipiprimitivi (purche “compatibili”).

Operatori logici:

&&: and;

||: or.Calcolati in modalita corto circuito, ad es:

x != 0 && (1 / x ) > x + y ; // non e s e g u i t a l a d i v i s . p e r 0

6/23 Programmazione II Lezione 8 12/11/2010

Page 7: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Operatori Bitwise

Sui tipi interi,e possibile accedere direttamente alla loro rappresentazionebinaria:

usati per definire tecniche di mascheratura per individuare il valore disingoli bit;

~<exp>: not;

<exp> & <exp>: and;

<exp> | <exp>: or;

<exp> ^ <exp>: xor.

Lavorano su pattern di bit. Esempio:

i n t fourBitFromRight = ( n & 8) / 8 ;

Sono disponibili anche gli operatori di shift: << e >> che spostano il pattern dibit a sinistra o destra. Esempio:

i n t fourBitFromRight = ( n & (1 << 3) ) >> 3 ;

7/23 Programmazione II Lezione 8 12/11/2010

Page 8: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Operatore Ternario

condizione ? espressione1 : espressione2

Calcola espressione1 se condizione e true altrimenti calcola espressione2.Esempio:

x < y ? x : y

fornisce il valore piu piccolo tra x e y.

8/23 Programmazione II Lezione 8 12/11/2010

Page 9: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Controllo dei Tipi

Il compilatore controlla staticamente (a tempo di compilazione) che ilprogramma sia ben tipato:

ogni uso di una variabile deve essere conforme al tipo con cui e dichiarata.

1 i n t x = 3 ;2 i n t y = 5 ;3 b o o l e a n b = x + y ; // e r r o r e d i t i p o4 b o o l e a n c = ( x > b ) ; // e r r o r e d i t i p o

Riga 3: l’espressione x + y ha tipo int, e l’assegnamento di un valoreint a una variabile di tipo boolean non e consentito.

Riga 4: non e possibile confrontare un valore di tipo int con un valore ditipo boolean.

9/23 Programmazione II Lezione 8 12/11/2010

Page 10: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Costanti

In Java si utilizza la parola chiave final per indicare una costante:

1 p u b l i c c l a s s Constants {2 p u b l i c s t a t i c v o i d main ( String [ ] args ) {3 f i n a l d o u b l e CM_PER_INCH = 2 . 5 4 ;4 d o u b l e paperWidth = 8 . 5 ;5 d o u b l e paperHeight = 1 1 ;6 System . out . println ( ” Paper s i z e i n cm : ” + paperWidth←↩

∗ CM_PER_INCH + ” by ” + paperHeight ∗ ←↩CM_PER_INCH ) ;

7 }8 }

La parola chiave final stabilisce che una volta assegnato il valore alla variabile

non sara piu possibile modificarlo.

10/23 Programmazione II Lezione 8 12/11/2010

Page 11: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Costanti

E possibile anche definire costanti di classe con la parola chiave static final.

1 p u b l i c c l a s s Constants {2 p u b l i c s t a t i c f i n a l d o u b l e CM_PER_INCH = 2 . 5 4 ;34 p u b l i c s t a t i c v o i d main ( String [ ] args ) {5 d o u b l e paperWidth = 8 . 5 ;6 d o u b l e paperHeight = 1 1 ;7 System . out . println ( ” Paper s i z e i n cm : ” + paperWidth←↩

∗ CM_PER_INCH + ” by ” + paperHeight ∗ ←↩CM_PER_INCH ) ;

8 }9 }

Altre classi possono accedere alla variabile (perche public) tramiteConstants.CM_PER_INCH.

11/23 Programmazione II Lezione 8 12/11/2010

Page 12: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Esercizio

1 Scrivere un programma che calcola l’area di un cerchio: il raggio e passatocome primo parametro del programma (args[0]) e viene assegnato allavariabile radius: per convertire una String in double usare il metodostatico Double.parseDouble(String); inoltre, deve essere definita unavariabile costante PI il cui valore e 3.14159; la formula da usare e quindiradius × radius * PI il cui valore verra stampato su console.

2 Utilizzare la costante Math.PI definita da Java per il pi greco e il metodostatico Math.pow per calcolare il quadrato del raggio.

12/23 Programmazione II Lezione 8 12/11/2010

Page 13: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Stringhe

In Java, le stringhe corrispondono a stringhe di caratteri Unicode.

Non esiste un tipo stringa primitivo:

esiste una classe della liberia standard chiamata String:

String s = ”” ; // s t r i n g a vuotaString h = ” H e l l o ” ;

Per ottenere la lunghezza di una stringa:

String h = ” H e l l o ” ;i n t n = h . length ( ) ; // n = 5 ;

Le stringhe sono oggetti immutabili (non modificabili).

13/23 Programmazione II Lezione 8 12/11/2010

Page 14: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Stringhe

Per fare il concatenamento di due o piu stringhe:

String h = ” H e l l o ” ;h = h . substring ( 0 , 3) + ”p ! ” ; // h = Help ! ;

Per verificare se due stringhe sono uguali:

s . equals ( t ) ;

Non usare l’operatore ’==’ per verificare se due stringhe sono uguali:

stabilisce solo se le stringhe sono memorizzate o no nella stessaposizione in memoria.

14/23 Programmazione II Lezione 8 12/11/2010

Page 15: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Leggere da Input

1 i m p o r t java . util . ∗ ;2 . . .3 Scanner scanner = new Scanner ( System . in ) ;4 . . .5 scanner . nextLine ( ) ; // p e r l e g g e r e una s t r i n g a6 scanner . nextInt ( ) ; // p e r l e g g e r e un i n t e r o

15/23 Programmazione II Lezione 8 12/11/2010

Page 16: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Esercizio

Scrivere un programma che chiede all’utente prima il nome, poi il cognome einfine l’eta. Di seguito, il programma stampa sulla console un messaggio dibenvenuto contenente il nome e il cognome dell’utente, la lunghezza del nomee del cognome, true o false se il nome e uguale al cognome, e infine ilmessaggio indica quanti anni l’utente avra l’anno successivo.

16/23 Programmazione II Lezione 8 12/11/2010

Page 17: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Principali Comandi

La sintassi dei principali comandi Java e la stessa del C:

i f (<condizione>) {<C1>

} e l s e {<C2>

}

w h i l e (<condizione>) {<corpo>

}

do {<corpo>

}w h i l e (<condizione>) ;

f o r (<inizializzazione >; <condizione >; <incremento>) {<corpo>

}

<condizione> e una espressione di tipo boolean.

17/23 Programmazione II Lezione 8 12/11/2010

Page 18: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Comando if

i f (<condizione>) {<C1>

} e l s e {<C2>

}

Se la condizione <cond> e vera viene eseguito <C1>, altrimenti viene eseguito<C2>.

<cond> deve essere di tipo boolean.

Il ramo else puo essere omesso se vuoto.

i n t a ;i f ( k < 0) {

a = −k ;} e l s e {a = k ;

}

18/23 Programmazione II Lezione 8 12/11/2010

Page 19: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Comando while

w h i l e (<condizione>) {<corpo>

}

Prima di ogni iterazione viene valutata la guardia <cond>, quindi:

se <cond> e vera, viene eseguito il corpo del ciclo, quindi si passa alla successivaiterazione;

se <cond> e falsa, si esce dal ciclo.Il corpo del ciclo e eseguito fintanto che la guardia rimane vera.

p u b l i c s t a t i c v o i d main ( String [ ] args ) {Scanner in = new Scanner ( System . in ) ;b o o l e a n finito = f a l s e ;w h i l e ( ! finito ) {

System . out . println ( ” S c r i v i un numero : ” ) ;i n t n = in . nextInt ( ) ;finito = ( n == 0) ;

}}

19/23 Programmazione II Lezione 8 12/11/2010

Page 20: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Comando do-while

do {<corpo>

}w h i l e (<condizione>) ;

Dopo ogni iterazione (esecuzione del corpo del ciclo) viene valutata la guardia <cond>,quindi:

se <cond> e vera, si esegue un’altra iterazione;

se <cond> e falsa, si esce dal ciclo.

p u b l i c s t a t i c v o i d main ( String [ ] args ) {Scanner in = new Scanner ( System . in ) ;b o o l e a n finito = f a l s e ;do {

System . out . println ( ” S c r i v i un numero : ” ) ;i n t n = in . nextInt ( ) ;finito = ( n == 0) ;

} w h i l e ( ! finito ) ;}

20/23 Programmazione II Lezione 8 12/11/2010

Page 21: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Esercizio

Scrivere un programma per calcolare quanti anni servono a una persona per poterandare in pensione. Devono essere definite tre variabili il cui valore e inizializzato daconsole:

1 goal, che tiene traccia della quantita di soldi massimi che una persona deveguadagnare prima di andare in pensione,

2 payment, per tenere traccia dei soldi guadagnati in un anno,

3 interestRate, il tasso di interesse annuo.

Tramite un ciclo while, a ogni iterazione aumentare:

1 una variabile (balance), che tiene traccia dei soldi totali guadagnati (sommandoquelli dell’anno corrente e tenendo in conto il tasso annuo),

2 gli anni trascorsi (years).

Alla fine del ciclo, quando balance e uguale o maggiore a interestRate, stampare un

messaggio che indichi quanti anni occorrono per andare in pensione.

21/23 Programmazione II Lezione 8 12/11/2010

Page 22: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Principali Comandi

Continua...

22/23 Programmazione II Lezione 8 12/11/2010

Page 23: Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf · Programmazione II Lezione 8 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 12/11/2010 1/23 Programmazione

JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi

Riferimenti

[1] Core Java 2. Vol. 1: Fondamenti (Cap. 3).

Horstmann Cay S., Cornell Gary.

23/23 Programmazione II Lezione 8 12/11/2010