3/12/2004Laboratorio di Programmazione - Luca Tesei1 Sequenze di lunghezza variabile ArrayList Operazioni Ricerche.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Array multidimensionali
Universita di Camerino
If a cascata, switch, operatori logici
2/11/2004Laboratorio di Programmazione - Luca Tesei1 Progettazione Fase di progettazione di unapplicazione Fase di implementazione.
Linguaggi Regolari e Linguaggi Liberi
12/11/2004Laboratorio di Programmazione - Luca Tesei1 Caratteri – Input da Console Il tipo char Input dallo standard input.
26/10/2004Laboratorio di Programmazione - Luca Tesei1 Variabili e Oggetti Lo spazio di memoria di Java Le API di Java.
5/11/2004Laboratorio di Programmazione - Luca Tesei1 Esercizi Su Progettazione e Implementazione di classi.
29/10/2004Laboratorio di Programmazione - Luca Tesei1 Metodi e variabili istanza Definizione e chiamata di metodi Uso delle variabili istanza Documentazione.
9/11/2004Laboratorio di Programmazione - Luca Tesei1 Tipi numerici di base - Costanti Interi e decimali Definizione di costanti.
22/10/2004Programmazione e Laboratorio di Programmazione – Luca Tesei1 Laboratorio – Primo Impatto Scrivere un semplice programma I primi concetti.
Programmazione e Laboratorio di Programmazione – Luca Tesei1 La Programmazione Cosè la programmazione? Concetti preliminari.
29/11/2004Laboratorio di Programmazione - Luca Tesei1 Ancora sulla progettazione/Pacchetti Concetti di coesione/accoppiamento/coerenza Uso dei package.
26/11/2004Laboratorio di Programmazione - Luca Tesei1 Input/Output Redirecting, scomposizione dellinput, uso di file.
2/11/2004Laboratorio di Programmazione - Luca Tesei1 Punto della situazione Da dove veniamo, dove andiamo.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
MultiSet, Liste Ordinate
Le gerarchie di tipi.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti.
Liste Ordinate 3 Maggio Ultima Lezione Abbiamo visto i tipi di dato astratti IntList e StringList Realizzano liste di interi e di stringhe Realizzati.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
9/12/2004Laboratorio di Programmazione - Luca Tesei1 Ereditarietà
Allocazione dinamica della memoria
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
Astrazioni sul controllo Iteratori. 2 Nuove iterazioni Definendo un nuovo tipo come collezione di oggetti (p. es., set) si vorrebbe disporre anche di.
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Introduzione alla programmazione lll
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
Il Linguaggio Macchina
memoria gestita staticamente:
Le funzioni.
Java Collections.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
11/11/2004Laboratorio di Programmazione - Luca Tesei1 Operazioni numeriche - Input Espressioni, funzioni matematiche, classi involucro, Acquisizione di.
Corso JAVA Lezione n° 11 Istituto Statale di Istruzione Superiore “F. Enriques”
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
15/11/2004Laboratorio di Programmazione - Luca Tesei1 Costrutto condizionale Scelte, blocchi.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Vettori, indirizzi e puntatori Finora abbiamo usato gli indirizzi nel chiamare  la funzione scanf()  le altre funzioni per riferimento Tuttavia la vera.
Introduzione a Javascript
30/11/2004Laboratorio di Programmazione - Luca Tesei1 Interfacce e Polimorfismo.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Liste di Interi Esercitazione. Una variante Liste concatenate di Integers Non modificabile Costruttori per creare la lista vuota o un nodo Metodi d’istanza.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
Liste Concatenate 11 Aprile E’ una delle strutture dati fondamentali in tutti i linguaggi di programmazione di alto livello Una Lista Concatenata.
Liste di Interi Esercitazione. IntList Lista di interi Una lista è una disposizione ordinata di elementi ( non in modo crescente-descrescente, ma per.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti.
LIP: 8 Marzo 2005 Vettori. Abbiamo visto L’uso di Vector come alternativa all’uso di arrays Rivediamo l’esercizio dell’altra volta.
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Alcune Classi Standard Object, Vettori. Ereditarieta’ Abbiamo visto come tramite l’ereditarieta’ e’ possibile estendere classi esistenti -arricchendo.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Esercitazione 14 Marzo Esercizio dell’altra volta Definire un tipo di dato Abbonato i cui oggetti descrivono le informazioni relative ad un abbonato.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
LIP: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
LIP: 18 Aprile 2008 Interfacce. Rappresentazione Lista val next vuota Lista vuota: any true Lista non vuota: any true 154 false 24 false.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
30/10/01Array 1  Un array e’ una struttura dati che contiene piu’ valori del medesimo tipo.  La lunghezza di un array e’ stabilita quando l’array viene.
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE INFORMATICA Focus on.
Transcript della presentazione:

3/12/2004Laboratorio di Programmazione - Luca Tesei1 Sequenze di lunghezza variabile ArrayList Operazioni Ricerche

3/12/2004Laboratorio di Programmazione - Luca Tesei2 Vettori a lunghezza variabile Abbiamo visto come fare per definire una sequenza di variabili tutte dello stesso tipo tramite gli array Una forte limitazione degli array è che quando vengono creati bisogna specificare la loro lunghezza e, dopo la creazione, la dimensione non può essere più cambiata In molti casi è molto difficile stimare la dimensione necessaria al momento della creazione dellarray

3/12/2004Laboratorio di Programmazione - Luca Tesei3 Vettori a lunghezza variabile La libreria standard di Java ci viene in aiuto fornendo classi che definiscono array evoluti Due esempi sono java.util.Vector e java.util.ArrayList Le due classi sono uguali tranne che per una caratteristica legata alla concorrenza I vettori di Vector sono protetti da accessi simultanei, potenzialmente dannosi, da parte di due o più thread (sottoprocessi della JVM) mentre ArrayList non ha questo controllo

3/12/2004Laboratorio di Programmazione - Luca Tesei4 Vettori a lunghezza variabile Se non si gestiscono thread nella nostra applicazione possiamo tranquillamente usare ArrayList In tutti gli altri casi è meglio usare Vector Si noti, in particolare, che in ogni applicazione che usa uninterfaccia grafica ci sono almeno due thread: il main e il gestore dellinterfaccia Pertanto è bene usare Vector se si usa linterfaccia grafica

3/12/2004Laboratorio di Programmazione - Luca Tesei5 ArrayList Illustriamo ArrayList sapendo che comunque le stesse considerazioni valgono per Vector Un oggetto di ArrayList rappresenta una lista sequenziale di oggetti generici Gli elementi della sequenza sono numerati a partire dal primo Come per gli array la numerazione parte da 0

3/12/2004Laboratorio di Programmazione - Luca Tesei6 ArrayList Si può accedere in maniera indipendente ad ogni elemento dell ArrayList tramite un indice intero, come per gli array Si può sempre inserire un nuovo elemento in fondo a un ArrayList tramite il metodo add Non cè limite (a parte la disponibilità di memoria fisica) alla dimensione che un ArrayList può raggiungere Limplementazione della classe fa in modo di allocare sempre nuovo spazio quando ce nè bisogno

3/12/2004Laboratorio di Programmazione - Luca Tesei7 Purse e Coin Consideriamo di nuovo la classe Purse Limplementazione che abbiamo dato, ogni volta che viene inserita una nuova moneta, semplicemente incrementa di uno un contatore per il tipo di moneta inserita Sarebbe più realistico se il borsellino potesse memorizzare proprio le singole monete Utilizzeremo un ArrayList per migliorare Purse e permettergli di memorizzare un numero, non specificato a priori, di oggetti della classe Coin

3/12/2004Laboratorio di Programmazione - Luca Tesei8 Operazioni su ArrayList Vediamo come si crea un oggetto della classe ArrayList e come si aggiungono elementi ArrayList coins = new ArrayList(); coins.add(new Coin(0.1, Dime)); coins.add(new Coin(0.25, Quarter));...

3/12/2004Laboratorio di Programmazione - Luca Tesei9 Accesso agli elementi Per accedere ad un elemento di un ArrayList a si usa il metodo a.get(i) passando come parametro la posizione i delloggetto richiesto (è lanalogo di a[i] per gli array) La posizione deve essere tra 0 e la dimensione a.size()- 1 (in caso contrario viene sollevata uneccezione) Il metodo size() è lanalogo del campo length degli array

3/12/2004Laboratorio di Programmazione - Luca Tesei10 Tipo degli elementi Gli elementi sono tutti di tipo Object generico È possibile inserire in un ArrayList anche elementi non omogenei (ma in genere non è una buona pratica di programmazione) È necessario fare un cast esplicito per poter utilizzare tutte le funzionalità di un oggetto recuperato dall ArrayList (che altrimenti può essere usato solo come un generico elemento della classe Object – vedi API)

3/12/2004Laboratorio di Programmazione - Luca Tesei11 Recupero di un elemento Coin aCoin = (Coin) coins.get(0); coins.get(0) restituisce un riferimento ad un Object che sarebbe il primo elemento di coins Sappiamo che questo Object in realtà è un oggetto della classe Coin e facciamo un cast esplicito per riottenere la possibilità di chiamare i metodi della classe Coin sullelemento recuperato

3/12/2004Laboratorio di Programmazione - Luca Tesei12 Accesso agli elementi Vediamo una tipica attività molto comune cioè lesame in sequenza di tutti gli elementi di un ArrayList Lo schema di programma che si usa è esattamente analogo a quello usato per un array, adattando solo la notazione

3/12/2004Laboratorio di Programmazione - Luca Tesei13 Accesso in sequenza Calcola il valore totale di tutte le monete attualmente presenti nell ArrayList coins : double total = 0; for (int i = 0; i < coins.size(); i++) { // Recupero con cast Coin aCoin = (Coin) coins.get(i); total = total + aCoin.getValue(); }

3/12/2004Laboratorio di Programmazione - Luca Tesei14 Inserzione Il metodo dalla segnatura void add(Object) aggiunge un elemento in fondo all ArrayList Il metodo dalla segnatura void add(int, Object) aggiunge un elemento nella posizione specificata dal primo parametro e fa scorrere lelemento attualmente in quella posizione e tutti gli eventuali elementi che seguono di una posizione verso destra

3/12/2004Laboratorio di Programmazione - Luca Tesei15 Inserzione Coin value ArrayList Coin value Coin value Coin value coins myDime Heap... 0: 1: 2: myQuarter

3/12/2004Laboratorio di Programmazione - Luca Tesei16 Inserzione Supponiamo di eseguire, nello stato appena visto, questa aggiunta: coins.add(1,myDime); Il risultato è il seguente stato:

3/12/2004Laboratorio di Programmazione - Luca Tesei17 Inserzione Coin value ArrayList Coin value Coin value Coin value coins myDime Heap... 0: 1: 2: 3: myQuarter

3/12/2004Laboratorio di Programmazione - Luca Tesei18 Rimozione È possibile rimuovere un elemento in una data posizione con il metodo Object remove(int) Tutti gli elementi che seguono, se ce ne sono, vengono spostati di una posizione verso sinistra Il metodo restituisce un riferimento alloggetto rimosso Ad esempio supponiamo di eseguire la seguente istruzione a partire dallo stato appena disegnato: Object rimosso = coins.remove(0);

3/12/2004Laboratorio di Programmazione - Luca Tesei19 Rimozione Coin value ArrayList Coin value Coin value Coin value coins myDime Heap... 0: 1: 2: myQuarter rimosso

3/12/2004Laboratorio di Programmazione - Luca Tesei20 Assegnamento Per cambiare un elemento in una certa posizione con un altro si usa il metodo void set(int, Object) Listruzione seguente coins.set(0,myQuarter); eseguita nello stato precedente porta nel seguente stato (che è esattamente la situazione da cui eravamo partiti)

3/12/2004Laboratorio di Programmazione - Luca Tesei21 Assegnamento Coin value ArrayList Coin value Coin value Coin value coins myDime Heap... 0: 1: 2: myQuarter rimosso

3/12/2004Laboratorio di Programmazione - Luca Tesei22 Ricerca La classe ArrayList mette a disposizione due metodi per la ricerca di un oggetto in un ArrayList Il metodo int indexOf(Object) cerca il primo elemento dell ArrayList su cui è chiamato che risulta uguale all Object passato come parametro tramite il metodo equals() Se il risultato è –1 allora loggetto non è presente Altrimenti il risultato è la posizione delloggetto

3/12/2004Laboratorio di Programmazione - Luca Tesei23 Ricerca Il metodo int lastIndexOf(Object) si comporta come indexOf, ma riporta lultima posizione delloggetto nell ArrayList o –1 Il criterio di ricerca, più precisamente, è il seguente: Sia o il riferimento alloggetto passato come parametro Viene cercato lelemento e dell ArrayList per cui o.equals(e) è vero

3/12/2004Laboratorio di Programmazione - Luca Tesei24 Ricerca equals è un metodo polimorfico Il codice che viene effettivamente eseguito dipende dal tipo effettivo delloggetto riferito da o Se la classe a cui o appartiene non fornisce un metodo equals allora viene usato quello della classe Object Il metodo equals della classe Object confronta i riferimenti: due oggetti sono uguali se sono fisicamente lo stesso oggetto allocato, ciè hanno lo stesso riferimento

3/12/2004Laboratorio di Programmazione - Luca Tesei25 Ricerca Non abbiamo implementato il metodo equals per la classe Coin quindi verrà usato quello di Object nella seguente ricerca: int myQuarterPosition = coins.indexOf(myQuarter); Nello stato in cui eravamo arrivati questa ricerca restituisce lindice 0, cioè la posizione delloggetto puntato da myQuarter in coins

3/12/2004Laboratorio di Programmazione - Luca Tesei26 Ricerca Tuttavia la seguente ricerca restituisce –1: int risultato = coins.indexOf( new Coin(0.25, Quarter)); Loggetto non viene trovato perché si usa il metodo equals della classe Object Loggetto passato come parametro è un oggetto nuovo appena creato e quindi il suo riferimento è diverso da tutti i riferimenti presenti in coins

3/12/2004Laboratorio di Programmazione - Luca Tesei27 Ricerca Possiamo pensare di definire un metodo equals per Coin in modo che identifichi due monete se hanno lo stesso nome e lo stesso valore In questo modo la ricerca effettuata dai metodi indexOf e lastIndexOf avrà esito positivo se viene trovata una moneta in coins che ha lo stesso valore e lo stesso nome di quella passata come parametro

3/12/2004Laboratorio di Programmazione - Luca Tesei28 equals Il metodo equals viene chiamato da indexOf o da lastIndexOf sull Object che viene loro passato Se passiamo un oggetto di tipo Coin allora sappiamo che il polimorfismo farà in modo che il metodo equals eseguito sia quello della classe Coin Il metodo equals viene chiamato passando come parametri i riferimenti degli elementi dell ArrayList che sono di tipo Object

3/12/2004Laboratorio di Programmazione - Luca Tesei29 equals Se definissimo il metodo con la segnatura boolean equals(Coin) non sarebbe questo ad essere eseguito, ma sempre quello di Object poiché i riferimenti passati come parametri sono di tipo Object (in questo caso il polimorfismo non si applica) Per poter effettuare la ricerca in questo modo dobbiamo quindi definire un metodo con segnatura boolean equals(Object) in Coin

3/12/2004Laboratorio di Programmazione - Luca Tesei30 equals public boolean equals(Object o) { if ( o instanceof Coin ) { Coin aCoin = (Coin) o; if ( this.value == aCoin.value && this.name.equals(aCoin.name) ) return true; else return false; } else return false; }

3/12/2004Laboratorio di Programmazione - Luca Tesei31 equals Possiamo comunque sempre definire un metodo equals anche per confronti tra oggetti entrambi formalmente di tipo Coin : public boolean equals(Coin aCoin) { if ( this.value == aCoin.value && this.name.equals(aCoin.name) ) return true; else return false; }

3/12/2004Laboratorio di Programmazione - Luca Tesei32 Ricerca Adesso si avrà che int risultato = coins.indexOf( new Coin(0.25, Quarter)); Restituisce la posizione 0, come volevamo

3/12/2004Laboratorio di Programmazione - Luca Tesei33 Ricerca Non sempre però è conveniente usare i metodi indexOf o lastIndexOf per cercare un elemento in un ArrayList Questo tipo di ricerca presenta due inconvenienti: 1.Bisogna definire il metodo equals nel modo che abbiamo visto 2.Non serve se vogliamo fare una ricerca in base a criteri diversi dalluguaglianza implementata in equals

3/12/2004Laboratorio di Programmazione - Luca Tesei34 Ricerca In generale una ricerca allinterno di un ArrayList può essere implementata nello stesso modo che abbiamo visto per gli array, cioè attraverso gli schemi di ricerca lineare certa o incerta Usando questi schemi non siamo costretti a usare per forza un criterio di uguaglianza: possiamo cercare, abbiamo visto, un elemento che soddisfa una proprietà P di qualsiasi tipo

3/12/2004Laboratorio di Programmazione - Luca Tesei35 Ricerca Vediamo ad esempio una ricerca lineare incerta, in coins, della prima moneta che ha un certo valore dato v : int i = 0; boolean trovato = false; while (i < coins.size() && !trovato) { Coin c = (Coin) coins.get(i); if (c.getValue() == v ) trovato = true; else i++; }

3/12/2004Laboratorio di Programmazione - Luca Tesei36 Ricerca Se eseguiamo la ricerca nello stato a cui eravamo pervenuti negli esempi precedenti con v = 0.1 il risultato sarà che viene trovata una moneta con valore v in posizione 2 di coins

3/12/2004Laboratorio di Programmazione - Luca Tesei37 Conteggio Vediamo un frammento di codice che serve a contare quante volte un moneta di un certo tipo occorre in coins Possiamo in questo caso usare il metodo equals(Coin) che abbiamo implementato Creiamo dapprima un oggetto Coin che ci servirà a fare il confronto: Coin modello = new Coin(0.25, Quarter);

3/12/2004Laboratorio di Programmazione - Luca Tesei38 Conteggio Poi contiamo le occorrenze di monete che eguagliano il modello secondo la nostra definizione di uguaglianza: int contatore = 0; for (int i = 0; i < coins.size(); i++) { Coin aCoin = (Coin) coins.get(i); if (aCoin.equals(modello)) contatore++; } Viene eseguito il metodo con segnatura boolean equals(Coin) della classe Coin

3/12/2004Laboratorio di Programmazione - Luca Tesei39 ArrayList e tipi di base Ma come possiamo fare se vogliamo creare un oggetto ArrayList contentente interi, booleani, double o altri tipi base? Gli elementi di un oggetto ArrayList possono essere solo oggetti! Ci vengono in aiuto le classi involucro A partire da un valore di un tipo base possiamo costruire un oggetto della classe involucro corrispondente contentente il valore

3/12/2004Laboratorio di Programmazione - Luca Tesei40 ArrayList e tipi base Ad esempio creiamo un ArrayList di interi in questo modo: ArrayList interi = new ArrayList(); interi.add(Integer(0)); interi.add(Integer(-9)); interi.add(Integer(15)); Per il recupero: Integer anInt = (Integer) interi.get(1); int v = anInt.intValue(); // vale -9

3/12/2004Laboratorio di Programmazione - Luca Tesei41 Esercizio Eseguire le modifiche viste alla classe Purse In particolare –Trasformare i metodi addNickel addDime e addQuarter nel metodo add(Coin) –cambiare gli altri metodi di conseguenza –Aggiungere un metodo getNumeberOf(Coin c) che dia il numero di monete uguali a c attualmente presenti nel borsellino –Aggiungere un metodo toString() che stampi in sequenza il nome di tutte le monete presenti nel borsellino secondo il loro ordine cronologico di inserimento

3/12/2004Laboratorio di Programmazione - Luca Tesei42 Esercizio Aggiungere alla classe Purse un metodo reverse() che inverta la sequenza di monete in un borsellino Ad esempio se il risultato di toString() dellesercizio precedente è [Dime, Nickel, Dime, Quarter] Dopo la chiamata di reverse dovrà essere: [Quarter, Dime, Nickel, Dime]

3/12/2004Laboratorio di Programmazione - Luca Tesei43 Esercizio Aggiungere alla classe Purse un metodo public void transfer(Purse other) che trasferisce in questo ( this ) borsellino il contenuto di un altro borsellino ( other ) Ad esempio se un borsellino a contiene [Dime, Nickel, Quarter] e un altro borsellino b contiene [Dime, Quarter, Quarter], dopo la chiamata a.transfer(b); b diventa vuoto e a contiente [Dime, Nickel, Quarter, Dime, Quarter, Quarter]

3/12/2004Laboratorio di Programmazione - Luca Tesei44 Esercizio Scrivere per la classe Purse un metodo public boolean equals(Object other) che controlli se i due borsellini contengono le stesse monete nello stesso ordine

3/12/2004Laboratorio di Programmazione - Luca Tesei45 Esercizio Scrivere per la classe Purse un altro metodo public boolean equals(Object other) che controlli se i due borsellini hanno le stesse monete in qualsiasi ordine Ad esempio i borsellini [Nickel, Dime, Dime, Quarter] e [Quarter, Dime, Nickel, Dime] devono risultare uguali

3/12/2004Laboratorio di Programmazione - Luca Tesei46 Esercizio Realizzare una classe Bank che gestisce un certo numero di conti Metodi: –public void addAccount(double initialBalance) –public void deposit(int account, double amount) –public void withdraw(int account, double amount) –public double getBalance(int account) Suggerimento: far coincidere i numeri di conto con gli indici di un ArrayList

3/12/2004Laboratorio di Programmazione - Luca Tesei47 Esercizio Scrivere un programma che produca permutazioni casuali dei numeri da 1 a 10 Per ogni permutazione casuale si deve riempire un array con i numeri da 1 a 10 in modo che non ve ne siano due uguali Realizzare un metodo int[] nextPermutation() che restituisce la prossima permutazione Continua.....

3/12/2004Laboratorio di Programmazione - Luca Tesei48 Esercizio contd Per realizzare la permutazione casuale basta riempire un array di 10 posizioni con i numeri da 1 a 10 in ordine poi generare un numero casuale i da 0 a 9 rimuovere dallarray il numero nella posizione i aggiungerlo allarray permutazione che si sta costruendo Ripetere fino a quando il primo array non si è esaurito

3/12/2004Laboratorio di Programmazione - Luca Tesei49 Esercizio Scrivere un programma che verifichi se una tabella di numeri n x n sia un quadrato magico Un quadrato magico è tale che contiene tutti numeri diversi e la somma di tutte le righe, di tutte le colonne e delle due diagonali è sempre lo stesso numero Prendere in input la tabella sotto forma di n*n numeri interi

3/12/2004Laboratorio di Programmazione - Luca Tesei50 Esercizio Scrivere un programma che crea quadrati magici con il seguente algoritmo: Si scelga la dimensione del lato n tale che n sia dispari Mettere il numero iniziale (es 1) al centro dellultima riga Sia k lultimo numero inserito in una posizione (i,j) Mettere il numero k+1 nella casella in basso a destra rispetto a quella di k andando a capo sui bordi Continua....

3/12/2004Laboratorio di Programmazione - Luca Tesei51 Esercizio contd Se la casella in basso a destra è già occupata o ci si trova nellangolo in basso a destra allora scrivere k+1 nella casella superiore alla posizione corrente Andare avanti incrementando k fino al completamento di tutta la tabella. Esempio: