Ricerca e ordinamento su array di oggetti. Corso di Programmazione 2 Esercitazione 5

Documenti analoghi
Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Programmazione 1 A.A. 2015/2016

Linguaggi di programmazione II AA 2010/2011 Esercitazione 2

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

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

Il Linguaggio Java. Le interfacce

public BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Fondamenti di Informatica 2

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Algoritmi di Ricerca. Esempi di programmi Java

Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

ARRAY E STRINGHE. G. Frosini Slide 1

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

TIPI PRIMITIVI: LIMITI

OO puro. Primi concetti di Java. Tipi primitivi. Ogni cosa è un oggetto. Java è object-oriented puro Non come il C+ + (OO ibrido) Lorenzo Bettini

La classe java.lang.object

Esempio: Interfacce. Gioco Interfacce

Programmazione ad Oggetti. Java Parte II

Synchronized (ancora)

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Esempio su strutture dati dinamiche: ArrayList

Esempio: Interfacce. Gioco Interfacce

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

18 - Classi parzialmente definite: Classi Astratte e Interfacce

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

Algoritmi di ordinamento (II parte)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Eredità e Polimorfismo in Java

Programmazione ad oggetti Prova scritta 15 Gennaio 2013

Calcolare x n = x x x (n volte)

Introduzione. Java. Costruttore

Fondamenti di Informatica T1 Mappe

Riassunto. I mattoni di base di un programma Java. Oggi. Un programma complicato. Oggi. Perché è complicato? Stefano Mizzaro 1.

Polimorfismo parametrico vs polimorfismo per inclusione

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

Stringhe e Array. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Compute engine generici in RMI

3. La sintassi di Java

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Esercizi della lezione 5 di Java

Introduzione a Java. Riferimenti

Parcheggio.rtf 1/8 6 gennaio Prova di programmazione: parcheggio a pagamento

Algoritmi di Ricerca. Esempi di programmi Java

Una classe Borsellino. Tipi numerici di base - Costanti. Esempio d uso. Classe Borsellino cont d. Primi passi per l implementazione di Purse

Prima lezione di laboratorio. I mattoni di base di un programma Java. Comandi Unix. Riassunto. Oggi. Un programma complicato.

Confronti, equals. Operatori Relazionali, confronti Confronti fra Oggetti, ridefinizione di equals. Laboratorio di Programmazione - Luca Tesei

Programmazione in Java (I modulo)

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone

Programmazione a oggetti e JAVA. Prof. B.Buttarazzi A.A. 2011/2012

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Il paradigma OO e le Classi

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

I costruttori. Il costruttore standard. Esempio di valori di default. Alterare il costruttore standard

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

Esonero del corso di Programmazione a Oggetti

Le variabili. Olga Scotti

Classi Wrapper. int Integer float Float char Char byte Byte double Double. classe "wrapper"

Costrutti per il controllo del flusso di esecuzione

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

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2012

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Programmazione Orientata agli Oggetti in Linguaggio Java

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3

Corso di Fondamenti di Informatica

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Java Native Interface Appunti

Indice. Introduzione a tool per lo sviluppo e l'esecuzione di programmi in linguaggio Java. Compilazione ed esecuzione di un programma

Prima lezione di laboratorio. I mattoni di base di un programma Java. Riassunto. Comandi Unix. Oggi. Blog & Group.

Fondamenti di Informatica. Dichiarazione, creazione e gestione di array in Java

Laboratorio di Programmazione 1 [Java]

Il Linguaggio Java. Classe. Classi ed oggetti

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

IL CONCETTO DI CLASSE

se invoco un metodo di Object che è ridefinito in Point, viene invocato il metodo definito in Point

ARRAY RESTITUITI DA FUNZIONI

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

Classi, Ereditarietà e Polimorfismo. Lezione 7

Errata Corrige di Manuale di Java 8

Linguaggi ad oggetti (object oriented) LINGUAGGI DI PROGRAMMAZIONE: PARADIGMI DI PROGRAMMAZIONE. Programmazione ad oggetti

Corso sul linguaggio Java

Metodi di una Collection

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Corso: Fondamenti di Informatica 1 (gruppo 8-9) Corsi di laurea: Area dell'informazione Questionario di autovalutazione 4

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Luglio Soluzione degli Esercizi

Corso di Laurea in Matematica Corso di Informatica Prova d Esame del 02/02/2010

Compito di Programmazione, 22 marzo 2007 INFORMATICI E MULTIMEDIALI

domenica 9 giugno 13 Serializzazione

La Serializzazione in Java. L24_Serialization 1

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

Costrutti iterativi. Utilizzo dei costrutti iterativi

Studente (Cognome Nome):

Il linguaggio Java: aggiunte in Java 1.5

Fondamenti di Informatica T-1. Selezione Stringhe

INTRODUZIONE SOMMARIO JAVA INTRODUZIONE

Transcript:

Ricerca e ordinamento su array di oggetti Corso di Programmazione 2 Esercitazione 5

Sommario Ricercare in array di oggetti Interfaccia comparable Ordinare array di oggetti

Problema Come ordinare, ricercare array di oggetti?

Ordinare un array Integer [] Definiamo la classe OrdinaArrayObject che include i metodi: static int bubblesort(integer A[]); static void inizializzacasuale(integer A[]); static void stampaarray(integer A[]); public static void main(string args[]); Cosa cambia?

Ordinare un array String[] Aggiungere nella classe OrdinaArrayObject i metodi: static int bubblesort(string A[]); static void inizializzacasuale(string A[]); static void stampaarray(string A[]); Modificare public static void main(string args[]);

Generazione casuale di una stringa public String randomstring(int length) { String ssource = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz"; char[] src = ssource.tochararray(); char[] buf = new char[length]; for(int i = 0; i < length; i++) buf[i] = src[new Random().nextInt(src.length)]; return new String(buf);

< versus compareto() da bubblesort(): for (int j=1;j<= A.length-i;j++) { if(a[j] < A[j-1]) //if(a[j-1].compareto(a[j])>0) { operator < cannot be applied to java.lang.string

< versus compareto()

compareto public int compareto(string anotherstring) Compares two strings lexicographically. [ ]. The result is a positive integer if this String object lexicographically follows the argument string. The result is zero if the strings are equal; compareto returns 0 exactly when the equals(object) method would return true. [ ] Parameters: anotherstring - the String to be compared. Returns: the value 0 if the argument string is equal to this string; a value less than 0 if this string is lexicographically less than the string argument; and a value greater than 0 if this string is lexicographically greater than the string argument.

Ordinare un Array Studente[] Definire la classe Studente Studente -int : matricola -float : mediavoti -int : nroesamisostenuti -int : nrolodi int compareto(studente) int compareto(studente o) { if(o.getmediavoti()<this.mediavoti) return +1; else if(o.getmediavoti()>this.mediavoti) return -1; return 0;

Ordinare un Array Studente[] Dotare la classe Studente di un costruttore definito come segue: private static int matricolacount=0; Studente(){ matricola=matricolacount++; mediavoti=(float)(new Random().nextDouble()*30.0); nroesamisostenuti=new Random().nextInt(20)+1; nrolodi=new Random().nextInt(nroEsamiSostenuti)+1;

Ordinare un Array Studente[] Aggiungere nella classe OrdinaArrayObject i metodi: static int bubblesort(studente A[]); static void stampaarray(studente A[]); Modificare al fine di inizializzare, stampare, ordinare un array Studente[10]

Problema E se volessimo ordinare Carta A[] =new Carta[10]; Persona A[]= new Persona[100]; Libro A[]= new Libro[25] Dovremmo definire: static int bubblesort(carta A[]); static int bubblesort(persona A[]); static int bubblesort(libro A[]);

static void bubblesort(carta A[]){ for (int i=1; i<=a.length-1; i++){ boolean scambiavvenuti = false; for (int j=1;j<= A.length-i;j++) { if( A[j-1].compareTo(A[j])>0) { Carta temp=a[j]; A[j]=A[j-1]; A[j-1]=temp; scambiavvenuti=true; if(!scambiavvenuti) break; Codice replicato! static void bubblesort(studente A[]){ for (int i=1; i<=a.length-1; i++){ boolean scambiavvenuti = false; for (int j=1;j<= A.length-i;j++) { if( A[j-1].compareTo(A[j])>0) { Studente temp=a[j]; A[j]=A[j-1]; A[j-1]=temp; scambiavvenuti=true; if(!scambiavvenuti) break;

Interfaccia Comparable interface Comparable { public int compareto(object o) Se una classe implementa l interfaccia Comparable allora sarà definita una relazione d ordine totale sui suoi oggetti, che saranno confrontabili. L intero restituito dal metodo compareto deve essere 1. positivo se l oggetto passato è minore 2. negativo se l oggetto passato è maggiore 3. zero se l oggetto passato è uguale all oggetto sul quale si invoca compareto.

Interfaccia Comparable Alcune classi che implementano l interfaccia Comparable Byte Character Long Integer Short Double Float BigInteger BigDecimal File String Date Numerico con segno Numerico senza segno Numerico con segno Numerico con segno Numerico con segno Numerico con segno Numerico con segno Numerico con segno Numerico con segno Dipende dal sistema, lessicografico Lessicografico Ordinamento cronologico

Ordinare array di oggetti ordinaarray(int A[]) { ordinaarray(float A[]) { ordinaarray(comparable A[]) {

Esercizio Modificare bubblesort per ordinare array di oggetti, testare con una delle classi wrapper dei tipi primitivi static void bubblesort (int A[]){ for (int i=1; i<=a.length-1; i++) { boolean scambiavvenuti = false; for (int j=1;j<= A.length-i;j++) { if(a[j]< A[j-1]){ int temp=a[j]; A[j]=A[j-1]; A[j-1]=temp; scambiavvenuti=true; if(!scambiavvenuti) break; Per svolgere l esercizio completare l implementazione della classe OrdinaArrayObject (vedi OrdinaArrayObject.java)

Esercizio Si consideri la classe Studente fornita. Essa implementa l interfaccia Comparable e ordina gli studenti in base alla media dei voti. Studente -int : matricola -float : mediavoti -int : nroesamisostenuti -int : nrolodi <<interface>> Comparable compareto(object o): int public int compareto(object o) { if(((studente)o).getmediavoti()<this.mediavoti) return +1; else if(((studente)o).getmediavoti()>this.mediavoti) return -1; return 0;

Esercizio class Studente implements Comparable{ public static void main(string rgs[]){ Studente s[]=new Studente[4]; s[0]=new Studente((float)28.5,10,3); s[1]=new Studente((float)24.5,12,5); s[2]=new Studente((float)26.5,15,1); s[3]=new Studente((float)22.5,14,4); int tempi=0; // cerca minimo for(int i=1;i<s.length;i++) { if(s[i].compareto(s[tempi])<0) tempi=i; System.out.println(s[tempI]); MATRICOLA: 4 MEDIA VOTI: 22.5 NUMERO ESAMI SOSTENUTI: 14 NUMERO LODI: 4

Esercizi 1. Creare un array di 10 elementi di classe Studente, avvalorarlo usando il costruttore standard di Studente (quello che genera casualmente i dati) e ordinarlo con il metodo bubblesort. 2. Modificare il metodo compareto di Comparable in modo da ordinare gli studenti in base al numero delle lodi. 3. Modificare i metodi: sequentialsearch binarysearch di RicercaArray.java in modo da ricercare degli elementi in array ordinati di oggetti.