Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java...

43
Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013

Transcript of Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java...

Page 1: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Programmazione a Oggetti e

JAVA

Prof. B.Buttarazzi

A.A. 2012/2013

Page 2: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

16/01/2013 2

Sommario

• Array

– Array monodimensionali

– Array bidimensionali

• Esercizi

Page 3: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

ARRAY

Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue

I componenti di un array:

– sono tutti dello stesso tipo

– possono essere di tipo primitivo (int, float,….) o non (array, stringhe, oggetti)

– sono indicizzati con variabili di tipo int (l’indice del

primo elemento è 0), con controllo di validità degli indici a run-time

Page 4: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Sintassi per la dichiarazione e creazione di

un array monodimensionale

<tipo di dato> <variabile array> [ ] =

new <tipo di dato> [ <dimensione > ] ;

oppure

<tipo di dato> [ ]<variabile array> =

new <tipo di dato> [ <dimensione > ] ;

int vi[ ]= new int[10] ;

int [ ] vi = new int[10] ;

Page 5: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Esempi: variabili di tipo array Esempi

int vi[ ]= new int[10] ; // vi è un array di 10 valori interi

boolean vb[ ]= new boolean[3]; // vb è un array di 3 valori logici

char vc[ ]= new char[6] ; // vc è un array di 6 caratteri

Page 6: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Array monodimensionali

C01FF:0000

char C[] = new char[4];

...

int I [] = new int[3];

fase dichiarativa

C[0] = 'a';

C[1] = 'b' ;

C[2] = 'c' ;

C[3] = 'd' ;

...

I[0] = 5 ;

I[1] = 1 ;

I[2] = 2 ;

fase di inizializzazione

I

01FF:0006

'a''b'

1

01FF:0000

01FF:0003

Memoria

Indirizzi

Fisici

'c''d'

5

2

8 byte

I[0]

I[1]

I[2]

C[0]

C[1]

C[2]

C[3]

4 byte

4 byte

4 byte

Formula per accedere alla locazione di memoria relativa

all’elemento in posizione i-esima:

<posizione iniziale array> + i * <dimensione elemento in locazioni>

Page 7: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

7

ARRAY: dichiarazione e creazione

Esempio:

int a[ ]; /* dichiarazione dell’identificatore a*/

a = new int[3]; /* creazione dell’array a*/

oppure

int a[] = new int[3];

// Dichiarazione e istanziazione (creazione) di un oggetto di tipo array

a

Dichiarare un oggetto a non significa

creare un oggetto!

• a non contiene l’oggetto

• a contiene il riferimento all’oggetto

a null

null è una costante predefinita in Java che sta ad

indicare che l’oggetto referenziato dalla variabile

non è stato ancora creato

null rappresenta un valore che significa “nessun

riferimento”, rappresentato dal numero zero

16/01/2013

Page 8: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

1 2 3

a

0 1 2

a[0]

a (array a una dimensione) int a[] = {1,2,3};

E' possibile anche fare una assegnazione in fase di dichiarazione:

a[1] a[2]

• La variabile dichiarata a (detta referenza o puntatore all'oggetto) contiene il riferimento necessario a trovare l’oggetto puntato da a in memoria, in pratica a contiene l'indirizzo di una locazione di memoria a partire dal quale è memorizzato l'oggetto.

int a[] = {1,2,3};

è del tutto equivalente a: int[] a = new

int[3];

a[0] = 1;

a[1] = 2;

a[2] = 3;

8

ARRAY:dichiarazione,creazione e

inizializzazione

Page 9: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Esempi:dichiarazione,creazione e

inizializzazione di variabili di tipo array

Inizializzazione di un array nella fase dichiarativa:

<tipo di dato> <variabile array> [ ] = { <elenco dei valori> };

Esempi

int vi[ ] = { 1,2,3,4,5,6,7,8,9,10 }; // vi è un array di 10 valori interi

boolean vb[ ] = { true,true,false }; // vb è un array di 3 valori logici

char vc[ ] = { 'a', 'b','c','d','e','f' }; // vc è un array di 6 caratteri

Page 10: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

10

• La lunghezza (dimensione) di un array è il numero di elementi dell’array

• la lunghezza di un array deve essere fissata al momento della sua creazione, e non può essere più cambiata.

• è possibile accedere alla lunghezza di un array mediante la variabile length

• length è una variabile d’istanza associata agli oggetti array

<riferimento-array>. length

Attenzione a non confondere la variabile length degli array con il metodo length()delle stringhe

16/01/2013

Page 11: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

11

ARRAY int a[] = {1,2,3};

int b[];

b = a;

a e b sono variabili riferimento che puntano agli stessi valori.

a

1 2 3

b

16/01/2013

Attenzione a non confondere la variabile a con l’oggetto puntato

da a.

Page 12: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

12

ARRAY int a[] = {1,2,3};

int b[];

b = a;

b[0] = 10;

a e b sono variabili riferimento che puntano agli stessi valori.

Una modifica su b è vista anche a

a

10 2 3

b

16/01/2013

Attenzione a non confondere la variabile a con l’oggetto puntato

da a.

Page 13: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Esercizio

Scrivere un programma che crei un array v di

10 elementi di tipo int, che acquisisca i dati

in input e stampi i valori memorizzati.

16/01/2013 13

Page 14: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

16/01/2013 14

import java.io.*;

public class EsempioArray

{

public static void main(String args[]) throws NumberFormatException,

IOException

{

int i=0;

int v[]=new int[10];

InputStreamReader In = new InputStreamReader(System.in);

BufferedReader Tastiera = new BufferedReader(In);

for (i=0; i<10; i++)

{

System.out.print("Valore: ");

v[i]=Integer.parseInt(Tastiera.readLine());

}

for(i=0; i<10;i++)

{

System.out.println("v["+i+"]="+v[i]);

}

}

}

Page 15: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Package

16/01/2013 Corso di Fondamenti di Informatica1 15

Page 16: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Esercizio

Scrivere un programma che crei un array vi

di 10 elementi di tipo int, che contenga i

valori da 1 a 10 e stampi i valori memorizzati.

16/01/2013 16

Page 17: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

16/01/2013 17

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class EsempioArray2

{

public static void main(String args[]) throws NumberFormatException,

IOException

{

int i=0;

int vi[ ] = { 1,2,3,4,5,6,7,8,9,10 };

for (i=0; i<vi.length; i++)

System.out.println("vi["+i+"]="+vi[i]);

}

}

Page 18: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

16/01/2013 18

Page 19: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Esercizio

Scrivere un programma che dopo aver letto in

input un valore intero nella variabile numero

che rappresenta la dimensione di un array a,

crea l’array acquisisce i dati da input e

stampa i valori in esso memorizzati.

16/01/2013 19

Page 20: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

import javax.swing.JOptionPane;

public class esempioArrayG{

public static void main(String[] args) {

// TODO Auto-generated method stub

int numero;

do {

String s = JOptionPane.showInputDialog("Immettere dimensione array ");

numero=Integer.parseInt(s);

}

while (numero<=0);

int a[] = new int[numero];

//lettura array

for (int i=0;i<a.length;i++) {

a[i] = Integer.parseInt(JOptionPane.showInputDialog((i +1)+"° numero"));

};

//scrittura array

String array ="";

for (int i=0;i<a.length;i++) {

array += a[i] ;

if (i+1!=a.length) {

array +=" "; } }

JOptionPane.showMessageDialog(null," l'Array inserito è: ["+array+"]");

}

}

Page 21: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Esercizio

Scrivere un programma che, dopo aver creato

e inizializzato un array di double a trova il

massimo valore in esso memorizzato.

16/01/2013 21

Page 22: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

double max = a[0];

for (int i = 1; i < a.length;

i++) { if (a[i] > max)

max = a[i]; }

16/01/2013 22

Page 23: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

double max = a[0];

for (int i = 1; i < a.length; i++) {

if (a[i] > max)

max = a[i]; }

La strategia usata è quella di scorrere l'array tenendo da parte il massimo numero trovato fino a quel momento, in una variable max, e ogni volta che il numero considerato è più grande di max, cambiare il valore di max con il valore superiore trovato, cosicché alla fine del processo, max è il più grande valore in tutto l'array.

L'unico problema è trovare un conveniente valore iniziale di max.

A tale scopo conviene iniziare con max posto uguale ad a[0], e proseguire poi scandendo l'array a partire da a[1], per trovare elementi maggiori.

16/01/2013 23

Page 24: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Esercizio

Scrivere un programma che dato un array a

lo copia in un array b.

16/01/2013 24

Page 25: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Esercizio

Scrivere un programma che dato un array di

double a lo copia in un array b.

a

1 2 3

16/01/2013 25

Page 26: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Esercizio

Scrivere un programma che dato un array di

double a lo copia in un array b.

a

1 2 3

b

• Per ottenere una copia di a, non basta scrivere

double b[] = a;

poiché questo non crea un nuovo array, ma semplicemente una nuova variabile b che si riferisce allo stesso array riferito da a

(un cambiamento di a[i] cambierebbe anche b[i])

16/01/2013 26

Page 27: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

• Per creare un array che sia effettivamente una copia identica di a, è necessario creare un nuovo oggetto-array grande come a e poi copiare singolarmente gli elementi da uno all'altro:

double[] b = new double[a.length];

// crea un nuovo oggetto-array della stessa dimensione di a

for (int i = 0; i < a.length; i++)

b[i] = a[i];

// copia ogni elemento da a a b

a

1 2 3

b

16/01/2013 27

Page 28: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

• Per creare un array che sia effettivamente una copia identica di a, è necessario creare un nuovo oggetto-array grande come a e poi copiare singolarmente gli elementi da uno all'altro:

double[] b = new double[a.length];

// crea un nuovo oggetto-array della stessa dimensione di a

for (int i = 0; i < a.length; i++)

b[i] = a[i];

// copia ogni elemento da a a b

a

1 2 3

b

1 2 3

16/01/2013 28

Page 29: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Array bidimensionali

In Java gli array bidimensionali (matrici) possono essere creati tramite array di array.

16/01/2013 29

Page 30: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

16/01/2013 30

Page 31: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Un array bidimensionale M può essere dichiarato come

segue:

int M[][] = new int[4][3];

in un array bidimensionale M, l’espressione M.length denota il numero di righe di M (cioè 4)

in un array bidimensionale M, l’espressione M[0].length denota il numero di colonne di M (cioè 3)

16/01/2013 31

Page 32: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

16/01/2013 32

Page 33: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Esercizio

Scrivere un programma che crea e

inizializzare un array bidimensionale M

come indicato in figura.

16/01/2013 33

Page 34: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

creazione array

int M[][] = new int[4][3];

16/01/2013 34

Page 35: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

inizializzazione

int k=1;

for (int riga = 0; riga < M.length ; riga++)

{ for (int col = 0; col <M[0].length; col++)

{ M[riga][col] = k++; } }

16/01/2013 35

Page 36: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

for (int i=0; i<M.length; i++)

{ for (int j=0; j<M[0].length; j++)

System.out.print(M[i][j]+" ");

System.out.println(); }

16/01/2013 36

stampa

Page 37: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

dichiarazione con inizializzazione int[][] M;

M = new int[][] { { 1, 2, 3 },

{ 4, 5, 6 },

{ 7, 8, 9 } ,

{ 10, 11, 12 } };

16/01/2013 37

Page 38: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Esercizio

Inizializzare l’array bidimensionale M con

tutti 1 nella prima riga, 2 nella seconda riga

e ….k nella k-esima riga.

int M [][] = new int[3][4];

16/01/2013 38

Page 39: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Soluzione

int M [][] = new int[3][4];

for (int riga = 0; riga < 4; riga++)

{ for (int col = 0; col < 3; col++)

{ M[riga][col] = riga+1; } }

16/01/2013 39

Page 40: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

• La prima volta che viene eseguito, il ciclo for esterno

esegue (con riga = 0) il ciclo for interno tre volte,

mettendo il valore 1 negli elementi della prima riga di

M,

M[0][0] = 1, M[0][1] = 1, M[0][2] = 1

La seconda esecuzione del for esterno riempirà la

seconda riga di M,

e …..la quarta riempirà l'ultima riga.

16/01/2013 40

Page 41: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

Questionario

1)Che cos’è un array?

□ E’ una struttura dati complessa, costituita dall'aggregazione di sole due variabili,

individualmente accessibili tramite un indice;

□ E’ una struttura dati complessa, costituita dall'aggregazione di un certo numero di

variabili, individualmente accessibili tramite un indice;

□ E’ una struttura dati complessa, costituita dall'aggregazione di un certo numero di

variabili di tipo intero, individualmente accessibili tramite un indice;

□ E’ una struttura dati complessa, costituita dall'aggregazione di un certo numero di

variabili o di tipo intero o carattere, individualmente accessibili tramite un indice.

2)Quali delle seguenti non è un tipo di array?

□ Monodimensionale;

□ Tridimensionale;

□ A stella;

□ Multidimensionali.

16/01/2013 Corso di Fondamenti di Informatica1 41

Page 42: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

16/01/2013 Corso di Fondamenti di Informatica1 42

3) Come viene dichiarato un array?

□ int x[ ]= new int[6] ;

□ int x[ ]= new int(3)

□ char c[ ]= new char(“ “) ;

□ boolean b= new boolean[3];.

4) Quali dei seguenti è un modo corretto per inizializzare un array?

□ int x[ ] = { ‘6’, ‘1’ , ‘9’};

□ char c[ ] = {a, b,c,d};

□ boolean b[ ] = { “true”, “true”, “false”};

□ boolean b[ ] = { false,true,false };.

5) Quale delle seguenti dichiarazioni è corretta per dichiarare un array di caratteri

con 10 elementi?

□ String a[]=new String[10];

□ char a[10]=new char[10];

□ char a[]=new char[10];

□ char a[]=new char[].

Page 43: Programmazione a Oggetti e JAVA - uniroma2.it · ARRAY Gli array sono oggetti utilizzati in Java per memorizzare elementi omogenei in locazioni di memoria contigue I componenti di

16/01/2013 Corso di Fondamenti di Informatica1 43

6) Java permette di oltrepassare la fine di un array in fase di esecuzione?

□ Si;

□ Si, ma solo di un elemento;

□ No, mai;

□ No, ma se si tratta di un array di caratteri si.

7) E’ possibile indicizzare un array con un valore negativo?

□ No;

□ Si, ma solo se tratta di array di tipo stringa;

□ Si;

□ Si, ma solo se si tratta di array di tipo intero.