Java Gli array. Array

Documenti analoghi
Java Gli array. Array

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Programmazione orientata agli oggetti Oggetti Composti. Oggetti composti

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Programmazione orientata agli oggetti Oggetti Composti. Oggetti composti

Java Le stringhe. Stringhe

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo

L Array e un oggetto. L array puo contenere elementi che sono: tipi primitivi, o oggetti (in realta riferimenti ad oggetti!!!).

Oggetti Composti (1) Oggetti Composti (2)

Esempio 2: Subtyping

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo

Java Le stringhe. Stringhe

Array. Definizione e utilizzo di vettori

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Programmazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo

Programmazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo

Programmazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo

Programmazione orientata agli oggetti Ereditarietà

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Array. Walter Didimo

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Programmazione orientata agli oggetti Ereditarietà

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61

Fondamenti di Informatica L-B Esercitazione n 5 Java: Interfaccia Comparable, Array

Oggetti. Oggetti e occultamento delle informazioni. Definire oggetti. Oggetti. Definire oggetti la sintassi. Convenzione sugli identificatori

Programmazione orientata agli oggetti Ereditarietà

Polimorfismo. Subtyping-polimorfismo

Le funzioni: la dichiarazione

Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità

Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java

Programmazione orientata agli oggetti Classi, package e file system. Package

Programmazione I - corso B a.a prof. Viviana Bono

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java

Programmazione con Java

Fondamenti di Informatica T-1

Impariamo a programmare in. Lezione 7

array in Java come disporre di un numero arbitrariamente alto di variabili omogenee

Scelte. Costrutto condizionale. Il costrutto if. Il costrutto if. Rappresentazione con diagramma a blocchi. Il costrutto if

Java Classi wrapper e classi di servizio. Classi di servizio

Impariamo a programmare in. Lezione 4

Programmazione orientata agli oggetti Classi, package e file system. Package

Corso sul linguaggio Java

3) Descrivere l architettura di un elaboratore tramite astrazione a livelli

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

Fondamenti di informatica T-1 (A K) Esercitazione 2: Linguaggio Java, basi e controllo del flusso

PRIMA ESERCITAZIONE IN JAVA

Programmazione orientata agli oggetti Subtyping e polimorfismo

Linguaggi di Programmazione I Lezione 10

Esonero di Informatica I. Ingegneria Medica

Definizione di classi. Walter Didimo

Programmazione Orientata agli Oggetti in Linguaggio Java

Gestione della memoria in Java. Emilio Di Giacomo e Walter Didimo

Fondamenti di informatica T-1 (A K) Esercitazione 4: controllo del flusso

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esercitazione Fondamenti di informatica 2

Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC)

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.

Corso sul linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Corso: Fondamenti di Informatica (Gruppo 2) a.a Corsi di laurea: Ing. Settore Informazione

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

OGGETTI COMPOSTI OGGETTI COMPOSTI - COSTRUZIONE

Classi ed Oggetti. Fondamenti di Informatica A-K

Esempio: Costruttori ed ereditarietà

Oggetti e classi. Cos è un oggetto

A. Ferrari. informatica. Java basi del linguaggio. Alberto Ferrari Informatica

Fondamenti di informatica T-1 (A K) Esercitazione 7: metodi, classi, oggetti

COGNOME NOME MATRICOLA DATA

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Fondamenti di informatica T-1 (A K) Esercitazione 9: array

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Metodi statici. Dichiarazione e chiamata di metodi statici

Introduzione a Java e all'ambiente di sviluppo

Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori

Fondamenti di Informatica T-1

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Array di array. Walter Didimo

La Gestione della Memoria. Carla Binucci e Walter Didimo

Programmazione orientata agli oggetti Ereditarietà

OOP in C++ ha membro (dati membro) e funzioni membro In Java i dati membro sono chiamati attributi e le funzioni membro metodi

Array. In Java un array è un oggetto senza metodi, con attributo pubblico length che memorizza la dimensione dell array

Programmazione orientata agli oggetti Il modello di Java. OOP in Java

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

JAVA. import java.util.*; #include <stdio.h> public static class test { int variable; private int variable; int main (int argc, char *argv[]) {

Corso sul linguaggio Java

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Transcript:

Java Gli array 1

Gli array In generale un array è una sequenza di locazioni di memoria, che contengono entità dello stesso tipo, e a cui si può fare riferimento con un nome comune Le entità che compongono un array prendono il nome di elementi dell array Un elemento di un array è identificato dal nome dell array e da un indice La notazione più comune, adottata anche da Java, fa uso delle parentesi quadre: nome[indice] Nella maggior parte dei linguaggi (Java compreso) gli indici degli array partono da zero 2

Gli array in Java In Java gli array sono entità molto particolari: si comportano a tutti gli effetti come oggetti senza esserlo del tutto Infatti Sono gestiti per riferimento: una variabile array è un riferimento Vengono creati dinamicamente con new Vengono distrutti automaticamente dal garbage collector quando non servono più (non esistono più riferimenti) Però Non sono istanze di una classe: non esiste in Java una classe 3

Dichiarazione e creazione Partiamo dal caso più semplice: un array di elementi di tipo primitivo, per esempio int. Prima di tutto dichiariamo l array: int[] a; La presenza delle parentesi quadre indica che non stiamo dichiarando una variabile di tipo intero ma un array di interi MAttenzione: abbiamo semplicemente creato un riferimento ad un array, non un array, infatti non è stata specificata la dimensione Per creare un array usiamo l operatore new, specificando la dimensione a = new int[50]; A questo punto abbiamo creato un array di 50 interi e a è un riferimento ad esso 4

Uso A questo punto possiamo accedere agli elementi dell array come in C: a[5] = 18; int n = a[7]; Avendo creato un array di 50 elementi gli indici validi vanno da 0 a 49 Cosa succede cerchiamo di accedere a elementi con indice al di fuori di questo intervallo? a[51] o a[-1] In C avremmo avuto efetti imprevedibili perché non c è alcuna verifica sugli indici: l effetto è quello di sporcare la memoria In Java il sistema genera un errore e il programma si blocca: non è infatti possibile accedere in modo errato alla memoria. 5

Inizializzatori Se vogliamo creare un array di 3 numeri reali e assegnare loro un valore, dobbiamo procedere così: double[] a; a = new double[3]; a[0] = 2.5; a[1] = 7.8; a[2] = 11.0; Per comodità Java prevede un estensione sintattica che consente di fare tutto questo in un unica istruzione: double[] a = {2.5,7.8,11.0}; L elenco di numeri tra parentesi graffa prende il nome di inizializzatore e consente in un colpo solo di creare l array, definendone la dimensione dell array, e di attribuire i valori iniziali dei suoi elementi E solo una scorciatoia, l effetto è esattamente quello della serie di istruzioni in testa alla pagina 6

Proviamo! Scrivere una classe Esempio, con un metodo main che dichiara un array a di interi, Alloca spazio per un array di 5 elementi Inizializza gli elementi con i valori 10,20,30,40 e 50 e poi cerca di stampare a[5] 7

Dimensioni Abbiamo visto che quando creiamo l array, con l operatore new, definiamo anche la sua dimensione Questo significa che possiamo dichiarare due variabili array dello stesso tipo e attribuirgli due dimensioni diverse: int n, m;. int[] a,b; a = new int[n*m]; b = new int[30]; MAttenzione: la dimensione di un array può essere stabilita solo al momento della creazione e non può essere più cambiata! 8

L attributo length E possibile conoscere la dimensione di un array usando l attributo length: int n; n = a.length; // n vale 50 n = b.length; // n vale 30 Attenzione: l attributo length è di sola lettura, non è possibile assegnargli un valore. Infatti, come abbiamo detto, la dimensione di un array non può cambiare dopo la creazione. Quindi se scriviamo a.length = 60; il compilatore darà errore 9

di oggetti Finora abbiamo visto esempi di array di tipi primitivi (interi e reali) Java consente di avere anche array di oggetti, o meglio array di riferimenti ad oggetti Possiamo quindi scrivere, per esempio: Counter[] a; a = new Counter[4]; Attenzione: a[] è un array di riferimenti. Creando l array non ho creato automaticamente anche gli oggetti di tipo Counter Devo farlo esplicitamente: a[0] = new Counter(); a[1] = new Counter(); a[2] = new Counter(); a[3] = new Counter(); O, ancor meglio: for(int i=0; i<4; i++) a[i] = new Counter(); 10

di oggetti (esempio con classi in gerarchia) Counter[] a; a = new Counter[4]; // allocazione delle istante, di natura diversa; a[0] = new Counter(); a[1] = new BiCounter(); a[2] = new CentoCounter(); a[3] = new SuperCounter(); E invocare: for(int i=0; i<4; i++) a[i].inc(); 11

Esempio: Orologio con gli array - 1 Proviamo a riscrivere la classe orologio usando un array di due Counter per le ore e i minuti: public class Orologio { private Counter[] c; public Orologio() { c = new Counter[2]; for (int i=0; i<2; i++) c[i] = new Counter(); } public void reset() { for (int i=0; i<2; i++) c[i].reset(); }... 12

Esempio: Orologio con gli array - 2 }... public void tic() { c[0].inc(); if (c[0].getvalue() == 60) { c[0].reset(); c[1].inc(); } if (c[1].getvalue() == 24) c[1].reset(); } public int getore() {return c[1].getvalue();} public int getminuti() {return c[0].getvalue();} 13

Il parametro di main Avendo visto array e stringhe siamo finalmente in grado di capire il significato del parametro dei metodi main() public static void main(string[] args) args è un array di stringhe che contiene gli argomenti passati sulla riga di comando quando si lancia un programma java Il main riceve quindi un array di String in cui ogni stringa è un argomento Non c è argc come nei programmi C, perché la dimensione dell array si può ricavare dall attributo args.legth Ogni elemento di args è un riferimento ad un istanza di String 14

Esempio con array e stringhe - 1 Proviamo a scrivere un programma che stampa a video gli argomenti passati dalla linea di comando public class EsempioMain { public static void main(string[] args) { if (args.length==0) System.out.println("Nessun argomento"); else for (int i=0; i<args.length; i++) System.out.println( "argomento " + i + ": " + args[i]) } } Da notare l uso del + per concatenare stringhe e interi 15

Quante stringhe vengono create? String s; s = "argomento " + i + ": " + args[i]; s = new String( argomento )+i+new String( : )+args[i]; s = new String(new String( argomento )+i+new String( : )+args[i]); 16

Esempio con array e stringhe - 2 Esempio d'uso: C:> java EsempioMain 34 e 56 "aaa eee" Output: argomento 0: 34 argomento 1: e argomento 2: 56 argomento 3: aaa eee Da notare che, a differenza del C, args[0] non è il nome del programma, ma il primo argomento passato al main (34 nell esempio sopra). 17