Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37...

37
Programmazione II Lezione 10 Daniele Sgandurra [email protected] 19/11/2010 1/37 Programmazione II Lezione 10 19/11/2010

Transcript of Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37...

Page 1: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Programmazione IILezione 10

Daniele Sgandurra

[email protected]

19/11/2010

1/37 Programmazione II Lezione 10 19/11/2010

Page 2: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Sommario

1 Esercitazione: i File JAR

2 JavaPrincipali ComandiBlocchiArray

2/37 Programmazione II Lezione 10 19/11/2010

Page 3: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Esercitazione: i File JAR

Parte I

Esercitazione: i File JAR

3/37 Programmazione II Lezione 10 19/11/2010

Page 4: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Esercitazione: i File JAR

Packaging Di Applicazioni Java

Spesso e utile raccogliere i file delle classi e altre risorse richieste dalprogramma (immagini, etc) in un file JAR (Java ARchive).

Dopo che il programma e stato impacchettato, si puo eseguiredirettamente l’archivio.

Un file JAR e un file zippato che puo contenere programmi, componenti(bean) e librerie di codice (es., rt.jar).

Oltre alle classi, immagini, etc, il file JAR deve contenere anche un file

manifesto che descrive le funzionalita specifiche dell’archivio:

solitamente, e chiamato MANIFEST.MF e si trova in unasottodirectory META-INF. Esempio:

Manifest-Version: 1.0

//righe che descrivono questo archivio

Name: Foo.Class

//righe che descrivono questo file

Name: com/mycompany/mypkg

//righe che descrivono questo pacchetto.

4/37 Programmazione II Lezione 10 19/11/2010

Page 5: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Esercitazione: i File JAR

Creare un JAR da Shell

Spostarsi nella directory bin del progetto Hello:

~$ cd workspace/Hello/bin

Creare il manifesto:

~/workspace/Hello/bin$ emacs Manifest.mf

Aggiungere nel manifesto la classe principale (bisogna anche inserire un ’acapo’ finale):

Main-Class: Hello

Creare il JAR:

~/workspace/Hello/bin$ jar cvfm Hello.jar Manifest.mf Hello.class

Eseguire il JAR:

~/workspace/Hello/bin$ java -jar Hello.jar

Hello World!

5/37 Programmazione II Lezione 10 19/11/2010

Page 6: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Esercitazione: i File JAR

Creare un JAR da Eclipse

6/37 Programmazione II Lezione 10 19/11/2010

Page 7: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Esercitazione: i File JAR

Creare un JAR da Eclipse

7/37 Programmazione II Lezione 10 19/11/2010

Page 8: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Esercitazione: i File JAR

Creare un JAR da Eclipse

8/37 Programmazione II Lezione 10 19/11/2010

Page 9: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Esercitazione: i File JAR

Creare JAR da Eclipse

9/37 Programmazione II Lezione 10 19/11/2010

Page 10: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Esercitazione: i File JAR

Creare JAR da Eclipse

10/37 Programmazione II Lezione 10 19/11/2010

Page 11: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Esercitazione: i File JAR

Creare JAR da Eclipse

11/37 Programmazione II Lezione 10 19/11/2010

Page 12: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Esercitazione: i File JAR

Creare JAR da Eclipse

12/37 Programmazione II Lezione 10 19/11/2010

Page 13: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Esercitazione: i File JAR

Creare JAR da Eclipse

13/37 Programmazione II Lezione 10 19/11/2010

Page 14: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Esercitazione: i File JAR

Creare JAR da Eclipse

Per vedere il contenuto:

jar -tvf Hello.jar

25 Thu Nov 11 09:19:40 CET 2010 META-INF/MANIFEST.MF

519 Wed Nov 03 14:31:14 CET 2010 Hello.class

295 Wed Oct 27 15:40:42 CEST 2010 .classpath

364 Wed Oct 27 15:40:42 CEST 2010 .project

Per estrarre il contenuto:

jar xvf Hello.jar

inflated: META-INF/MANIFEST.MF

inflated: Hello.class

inflated: .classpath

inflated: .project

14/37 Programmazione II Lezione 10 19/11/2010

Page 15: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Esercitazione: i File JAR

Creare JAR da Eclipse

In alternativa, possiamo creare un file manifest e usare quello.

15/37 Programmazione II Lezione 10 19/11/2010

Page 16: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Esercitazione: i File JAR

Creare JAR da Eclipse

16/37 Programmazione II Lezione 10 19/11/2010

Page 17: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Esercitazione: i File JAR

Creare JAR da Eclipse

17/37 Programmazione II Lezione 10 19/11/2010

Page 18: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

Java

Parte II

Java

18/37 Programmazione II Lezione 10 19/11/2010

Page 19: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Esercizio

Scrivere un programma che verifica se una stringa, inserita dall’utente tramite laconsole, e palindroma. Una stringa e palindroma se e composta da una sequenza dicaratteri (anche non alfabetici) che possa essere letta allo stesso identico modo ancheal contrario, senza considerare gli spazi (ad es.“radar”, “anna”, “i topi non avevanonipoti”, “o mordo tua nuora o aro un autodromo”, etc). Il programma deve eseguire ilminimo numero di confronti necessari per determinare se la stringa e palindroma.Verificare il corretto funzionamento del programma con:

una stringa palindroma di lunghezza pari;

una stringa palindroma di lunghezza dispari;

una stringa non palindroma di lunghezza pari;

una stringa non palindroma di lunghezza dispari;

una stringa di lunghezza unitaria (che quindi e palindroma);

una stringa di lunghezza zero (che definiamo come palindroma).

Suggerimento: usare il metodo substring() (o, meglio, il metodo charAt()) della

classe String all’interno di un ciclo while.

19/37 Programmazione II Lezione 10 19/11/2010

Page 20: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Comando for

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

}

<init>: comando di inizializzazione del ciclo;

<cond>: guardia del ciclo;

<incr>: comando di incremento.

i n t totale = 0 ;f o r ( i n t i = 0 ; i < 1 0 ; i++) {

totale = totale + i ;}

A differenza del C, in Java e possibile (e consigliato) dichiarare la variabile i

direttamente dentro il comando for: la i e visibile solo all’interno del ciclo.

20/37 Programmazione II Lezione 10 19/11/2010

Page 21: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Esercizio

Scrivere un programma che calcola le probabilita di vincere alla lotteria. Ad esempio,se si devono indovinare 5 numeri compresi tra 0 e 100, si devono prevedere100×99×98×97×96

1×2×3×4×5combinazioni di uscita. In generale, la formula da usare per

indovinare k numeri su n e:

n × (n − 1) × (n − 2) × · · · × (n − k + 1)

1 × 2 × 3 × · · · × k

Il programma chiede da input i due valori n e k e tramite un ciclo for calcola (estampa alla fine) le probabilita di vincere.

Suggerimento: usare nel comando di inizializzazione del for un variabile i inizializzata

a 1 e come guardia controllare che i sia minore o uguale a k e incrementarla ogni volta

di 1. Prima del ciclo, dichiarare una variabile lotteryOdds inizializzata a 1 che nel

ciclo, iterativamente, viene aggiornata opportunamente usando la formula precedente:

ad esempio, al primo ciclo verra moltiplicata e divisa, rispettivamente, per n e 1; al

secondo, per (n − 1) e 2 e cosı via, usando le variabili lotteryOdds, i e n.

21/37 Programmazione II Lezione 10 19/11/2010

Page 22: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Comando switch

s w i t c h ( expression ) {c a s e cond1 : code_block_1 ;c a s e cond2 : code_block_2 ;. . .c a s e condn : code_block_n ;d e f a u l t : code_block_default ;}

L’esecuzione inizia all’etichetta case e confronta il proprio valore conquello che effettua la selezione.

Prosegue fino al successivo break oppure fino alla fine dell’istruzioneswitch.

Se nessuna etichetta case coincide con il valore della selezione, allora siesegue la clausola default (se presente).

Dopo l’etichetta case si possono specificare valori interi o costantienumerate, ma non stringhe.

22/37 Programmazione II Lezione 10 19/11/2010

Page 23: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Comando switch: Esempio

1 c l a s s SwitchDemo {2 p u b l i c s t a t i c v o i d main ( String [ ] args ) {3 i n t month = Integer . parseInt ( args [ 0 ] ) ;4 s w i t c h ( month ) {5 c a s e 1 : System . out . println ( ” January ” ) ; b r e a k ;6 c a s e 2 : System . out . println ( ” F e b r u a r y ” ) ; b r e a k ;7 c a s e 3 : System . out . println ( ”March” ) ; b r e a k ;8 c a s e 4 : System . out . println ( ” A p r i l ” ) ; b r e a k ;9 c a s e 5 : System . out . println ( ”May” ) ; b r e a k ;

10 c a s e 6 : System . out . println ( ” June ” ) ; b r e a k ;11 c a s e 7 : System . out . println ( ” J u l y ” ) ; b r e a k ;12 c a s e 8 : System . out . println ( ” August ” ) ; b r e a k ;13 c a s e 9 : System . out . println ( ” September ” ) ; b r e a k ;14 c a s e 1 0 : System . out . println ( ” October ” ) ; b r e a k ;15 c a s e 1 1 : System . out . println ( ”November” ) ; b r e a k ;16 c a s e 1 2 : System . out . println ( ” December ” ) ; b r e a k ;17 d e f a u l t : System . out . println ( ” I n v a l i d . ” ) ; b r e a k ;18 }19 }20 }

23/37 Programmazione II Lezione 10 19/11/2010

Page 24: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Esercizio

Scrivere un programma che simula una semplice calcolatrice. Il programma deve

stampare iterativamente un menu con quattro opzioni per effettuare le quattro

operazioni matematiche (+, -, *, /) e una quinta per uscire dal programma. Per fare

questo, il programma all’interno di un ciclo chiede di selezionare un’opzione

(leggendola da console) e, se non e quella di uscita, chiede di inserire due numeri e li

legge; poi, tramite l’istruzione switch, il programma esegue l’operazione associata

all’opzione desiderata e ritorna il risultato dell’operazione. Nel caso in cui l’opzione sia

quella di uscita, il programma termina.

24/37 Programmazione II Lezione 10 19/11/2010

Page 25: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Istruzioni che Interrompono il Flusso di Controllo

Non esiste l’istruzione goto in Java.Istruzione break senza etichetta:

w h i l e ( years <= 100){

balance += payment ;d o u b l e interest = balance ∗ interestRate / 1 0 0 ;balance += interest ;i f ( balance >= goal ) b r e a k ;years++;

}

Il ciclo viene interrotto se si verifica years > 100 all’inizio del ciclo oppurebalance >= goal. Codice analogo a:

w h i l e ( years <= 100 && balance < goal ){

balance += payment ;d o u b l e interest = balance ∗ interestRate / 1 0 0 ;balance += interest ;i f ( balance < goal )

years++;}

dove pero la stessa condizione e controllata due volte.25/37 Programmazione II Lezione 10 19/11/2010

Page 26: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Istruzioni che Interrompono il Flusso di Controllo

Istruzione break con etichetta: per interrompere cicli multipli nidificati. Esempio:

Scanner scanner = new Scanner ( System . in ) ;i n t n ;read_data :w h i l e ( . . . ) // q u e s t a i s t r u z i o n e e ’ e t i c h e t t a t a{

. . .f o r ( . . . ) // i s t r u z i o n e non e t i c h e t t a t a{

System . out . println ( ‘ ‘ Scrivi un numero >= 0 ’ ’ ) ;n = scanner . nextInt ( ) ;i f ( n < 0) // non s u c c e d e n u l l a , s i p r o s e g u e

b r e a k read_data ; // f a u s c i r e d a l c i c l o r e a d d a t a. . .

}}// dopo i l b r e a ki f ( n < 0){

// g e s t i o n e s i t u a z i o n e non c o r r e t t a}e l s e{

// e s e g u e l ’ e l a b o r a z i o n e normale}

26/37 Programmazione II Lezione 10 19/11/2010

Page 27: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Istruzioni che Interrompono il Flusso di Controllo

Istruzione continue: trasferisce il controllo all’intestazione del ciclo piu interno.Esempio:

Scanner scanner = new Scanner ( System . in ) ;w h i l e ( sum < goal ){

System . out . println ( ‘ ‘ Scrivi un numero >= 0 ’ ’ ) ;n = scanner . nextInt ( ) ;i f ( n < 0) c o n t i n u e ;sum += n ; // non s i e s e g u e s e n < 0

}

In un ciclo for:

f o r ( count = 1 ; count <= 1 0 0 ; count++){

System . out . println ( ‘ ‘ Scrivi un numero , −1 per uscire ’ ’ ) ;n = scanner . nextInt ( ) ;i f ( n < 0) c o n t i n u e ;sum += n ; // non s i e s e g u e s e n < 0

}

Se n < 0, l’istruzione continue salta all’istruzione count++.

27/37 Programmazione II Lezione 10 19/11/2010

Page 28: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Blocchi e Visibilita dei Nomi

Un blocco e una porzione di codice racchiusa tra graffe:

{ // b l o c c o. . .}

La visibilita del nome di una variabile indica le parti di un programma in cui ilnome puo essere utilizzato per riferirsi alla variabile.

Una variabile dichiarata all’interno di un blocco:

e visibile solo all’interno del blocco stesso e dei sottoblocchi;e visibile solo dal punto della dichiarazione in poi.

Vincoli (controllati staticamente dal compilatore):

ogni variabile deve essere inizializzata prima del suo utilizzo;

non e possibile ridefinire una variabile gia definita:

neanche se le variabili sono presenti in due blocchi nidificati.

28/37 Programmazione II Lezione 10 19/11/2010

Page 29: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Blocchi: Esempio 1

1 p u b l i c s t a t i c i n t foo ( i n t x , i n t y )2 {3 i n t ret = −1;4 i f ( x > 0) {5 z = 3 ; // non c o r r e t t o : z non a n c o r a d i c h i a r a t a6 i n t z = x + y ;7 ret = ret + z ; // ok8 }9 r e t u r n ret − z ; // non c o r r e t t o : z non v i s i b i l e

10 }

29/37 Programmazione II Lezione 10 19/11/2010

Page 30: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Blocchi: Esempio 2

1 p u b l i c s t a t i c i n t foo ( i n t x , i n t y )2 {3 i n t q ;4 q = q + 1 ; // non c o r r e t t o : q non i n i z i a l i z z a t a5 i n t p ;6 i f ( x > 0) {7 p = 5 + x ;8 }9 r e t u r n p ; // non c o r r e t t o : p non sempre i n i z i a l i z z a t a

10 }

30/37 Programmazione II Lezione 10 19/11/2010

Page 31: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Blocchi: Esempio 3

1 p u b l i c s t a t i c v o i d main ( String [ ] args )2 {3 i n t n ;4 . . .5 {6 i n t k ;7 i n t n ; // e r r o r e : non p o s s i b i l e r i d e f i n i r e n i n un b l o c c o n i d i f i c a t o8 }9 }

31/37 Programmazione II Lezione 10 19/11/2010

Page 32: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Array

Struttura dati che memorizza un insieme di valori dello stesso tipo.

Si accede a ciascun valore mediante un indice intero:

es., se a e un array di interi, allora a[i] definisce l’intero nella i-esimaposizione.

Dichiarazione:

i n t [ ] a ; // d i c h i a r a z i o n e s e n z a i n i z i a l i z z a z i o n ea = new i n t [ 1 0 0 ] ; // c r e a un a r r a y d i 100 i n t e r i

Le voci dell’array sono numerate da 0 al valore (max - 1). Esempio:

i n t [ ] a = new i n t [ 1 0 0 ] ;f o r ( i n t i = 0 ; i < 1 0 0 ; i++)

a [ i ] = i ; // r i e m p i e l ’ a r r a y con v a l o r i da 0 a 99

32/37 Programmazione II Lezione 10 19/11/2010

Page 33: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Inizializzare gli Array

Java definisce una scorciatoia per creare e inizializzare gli array:

i n t [ ] smallPrimes = { 2 , 3 , 5 , 7 , 11 , 13} ;

E possibile anche inizializzare un array anonimo:

new i n t [ ] { 17 , 19 , 23 , 29 , 31 , 37} ;

Utile se si vuole assegnare nuovi valori ad un array gia esistente senza creare unanuova variabile:

smallPrimes = new i n t [ ] { 17 , 19 , 23 , 29 , 31 , 37} ;

Codice analogo a:

i n t [ ] anonymous = new i n t [ ] { 17 , 19 , 23 , 29 , 31 , 37} ;smallPrimes = anonymous ;

33/37 Programmazione II Lezione 10 19/11/2010

Page 34: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Copiare gli Array

E possibile anche copiare una variabile array in un’altra: a questo punto, entrambe le variabili fannoriferimento allo stesso array:

i n t [ ] luckyNumbers = smallPrimes ;luckyNumbers [ 5 ] = 1 2 ; // a d e s s o anche s m a l l P r i m e s [ 5 ] c o n t i e n e 12

Per copiare tutti gli elementi di un array in un altro si puo usare il metodo arraycopy() della classe System:System.arraycopy(from, fromIntex, to, toIndex, count). Ad esempio, il programma seguente:

i n t [ ] smallPrimes = { 2 , 3 , 5 , 7 , 11 , 13} ;i n t [ ] luckyNumbers = {1001 , 1002 , 1003 , 1004 , 1005 , 1006 , 1007} ;System . arraycopy ( smallPrimes , 2 , luckyNumbers , 3 , 4) ;f o r ( i n t i = 0 ; i < luckyNumbers . length ; i++)

System . out . println ( i + ” : ” + luckyNumbers [ i ] ) ;

stampa:

0: 1001

1: 1002

2: 1003

3: 5

4: 7

5: 11

6: 13

34/37 Programmazione II Lezione 10 19/11/2010

Page 35: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Il Ciclo for each

Introdotto con JDK 5.0.

Non si usano indici per scorrere gli array.

Sintassi:

f o r ( variabile : collezione ) istruzione

Esempio:

f o r ( i n t element : a )System . out . println ( element ) ;

analogo a:

f o r ( i n t i = 0 ; i < a . length ; i++)System . out . println ( a [ i ] ) ;

35/37 Programmazione II Lezione 10 19/11/2010

Page 36: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Esercizio

Scrivere un programma che crea un array di interi con valori compresi tra 2 e n (valorepassato da riga di comando o console). Il programma implementa il metodo delcrivello di Eratostene per generare i numeri primi: per ogni elemento i-esimo dell’array,settare a -1 tutti gli elementi di posizione j (j > i) il cui valore e multiplodell’elemento considerato. Alla fine stampare tutti e solo i numeri dell’array il cuivalore e diverso da -1 (che saranno numeri primi) preceduti da un numero progressivo(che parte da 1). Es:

1) 2

2) 3

3) 5

4) 7

5) 11

6) 13

7) 17

8) 19

9) 23

10) 29

.

.

.

36/37 Programmazione II Lezione 10 19/11/2010

Page 37: Programmazione II - Lezione 10groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-10.pdf · Java 18/37 Programmazione II Lezione 10 19/11/2010. Java Principali Comandi Blocchi Array Esercizio

JavaPrincipali ComandiBlocchiArray

Riferimenti

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

Horstmann Cay S., Cornell Gary.

37/37 Programmazione II Lezione 10 19/11/2010