Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf ·...
Transcript of Programmazione II - Lezione 8groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-08.pdf ·...
Programmazione IILezione 8
Daniele Sgandurra
12/11/2010
1/23 Programmazione II Lezione 8 12/11/2010
Sommario
1 JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi
2/23 Programmazione II Lezione 8 12/11/2010
Java
Parte I
Java
3/23 Programmazione II Lezione 8 12/11/2010
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
JavaTipi di Dato e OperatoriStringhe e InputPrincipali Comandi
Principali Comandi
Continua...
22/23 Programmazione II Lezione 8 12/11/2010
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