Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoOrtensia Stefani Modificato 9 anni fa
1
Fondamenti di informatica T-A Esercitazione 5 : Stringhe ed array AA 2012/2013 Tutor : Domenico Di Carlo
2
String La classe String : ▫ Rappresenta una sequenza di caratteri. ▫ Ha una classe ad hoc, vista la sua importanza. ▫ Permette la concatenazione tramite l’operatore ‘+’ (…che abbiamo visto utilizzando System.out.print(“val: ” + s.getValue)) ▫ Ha moltissimi metodi di utilità, ne vedremo alcuni ma è caldamente consigliato dare uno sguardo alla documentazione : http://docs.oracle.com/javase/6/docs/api/java/lang/String.html ▫ Si può instanziarne un oggetto in due differenti modi : String s1 = new String(“Stringa uno”); String s2 = “Stringa due”; Fondamenti di informatica A-K - Domenico Di Carlo
3
Immutabilità Le stringhe sono costanti ed immutabili, questo vuol dire che il loro valore non può essere modificato dopo essere state create. Infatti tutti i metodi che effettuano delle modifiche (trim(), concat(), etc) non modificano l'oggetto su cui è invocato il metodo ma creano e ritornano una nuova stringa. Fondamenti di informatica A-K - Domenico Di Carlo
4
Immutabilità, esempio Fondamenti di informatica A-K - Domenico Di Carlo Agendo in questo modo invece, andiamo a cambiare la variabile reference e quindi non a modificare la stringa ma a crearne un’altra lasciando in balìa del garbage collector la prima Questo vuol dire che in memoria, oltre alla stringa cui si riferisce a, verrà creato un nuovo oggetto tramite il metodo replace. Questa stringa non avrà, però, alcuna variabile reference associata.
5
Alcuni metodi visti in pratica Fondamenti di informatica A-K - Domenico Di Carlo
6
Alcuni esempi Scrivere un programma che concateni due stringhe s1 ed s2 e rimpiazzi tutte le ‘i’ contenute nella stringa risultante s3 = s1+s2 con delle ‘Z’ : public static void main(String[] args) { String s1 = "L'esame di informatica"; String s2 = " è il mio preferito!!!"; String s3 = s1.concat(s2); System.out.println("La stringa s3 prima del rimpiazzamento è : " + s3); s3 = s3.replace('i', ‘Z'); System.out.println("La stringa s3 dopo il rimpiazzamento è : " + s3); } Scrivere un programma che data una stringa di almeno 2 caratteri, s1s2 costruisca la stringa s2s1, cioè speculare rispetto al carattere medio. Esempio : Ciao -> aoCi. informatica -> maticainfor : public static void main(String [] args) { java.util.Scanner sc = new java.util.Scanner(System.in); System.out.println("Inserisci una stringa"); String parola = sc.nextLine(); int lunghezza, m; lunghezza = parola.length(); m = lunghezza/2; System.out.print(parola.substring(m,lunghezza)); System.out.print(parola.substring(0,m)); } Fondamenti di informatica A-K - Domenico Di Carlo
7
Tassonomia La classe Object è la superclasse, diretta o indiretta, di ogni classe e definisce lo stato ed il comportamento base che ciascun oggetto deve avere e cioè l’abilità di : confrontarsi con un altro oggetto convertirsi in una stringa … etc etc etc Fondamenti di informatica A-K - Domenico Di Carlo
8
toString E’quindi evidente che è sempre opportuno ridefinire i comportamenti dei metodi della classe Object per adattarli al caso specifico. Il metodo : public String toString() ritorna una rappresentazione testuale dell’oggetto del tipo ClassName@HashCode che, in molte occasioni, non ci dice nulla di significativo. Potremmo ad esempio ridefinire il metodo toString nella classe Contatore : public class Contatore { int valore; [costruttori] [altri metodi] public String toString() { return ““ + valore; } Fondamenti di informatica A-K - Domenico Di Carlo
9
Equals E’importante sapere inoltre che due stringhe non si comparano tramite l’operatore ‘==‘ come visto, ad esempio, per gli interi. Il codice : String s1 = “Ciao mamma“; String s2 = “Ciao mamma“; if ( s1 == s2 ) System.out.println(“Le due stringhe sono uguali.“); Non funziona come atteso perché l’operatore ‘==‘ controlla se le variabili referenziano lo stesso oggetto (cioè se è puntata la stessa area di memoria), non se il valore della stringa è lo stesso. Se vogliamo sapere se due stringhe sono uguali dobbiamo usare il metodo public boolean equals(String s); Ad esempio potremmo aggiungere il seguente codice all’interno della classe Contatore per confrontare se due contatori sono uguali : public boolean equals (Contatore c) { if (value == c.getValue()) return true; return false; } Fondamenti di informatica A-K - Domenico Di Carlo
10
Array Gli array sono dei contenitori che ospitano un numero prestabilito di oggetti dello stesso tipo : Il codice che segue, ad esempio, crea un array capace di contenere al più 10 numeri interi int[] arrayInteri; arrayInteri = new int[10]; La dimensione dell’array è definita all’atto della inizializzazione (con la new) e memorizzata nell’attributo length. Ad esempio l’array ‘arrayInteri’ appena creato può contenere non più di 10 elementi ! Non si può estendere dinamicamente un array (bisogna ricrearlo). Per fare questo esistono delle classi apposite che vedremo più avanti nel corso. Fondamenti di informatica A-K - Domenico Di Carlo
11
Array di oggetti E’possibile definire array di qualsiasi tipo di oggetto (purché sia lo stesso oggetto). Possiamo creare un array di interi, di stringhe, di classi Persona, di classi Contatore (basta con sti contatori, non ne posso più) : public class TestArrayContatore { public static void main(String args[]){ Contatore[] contatori = new Contatore[3]; contatori[0].inc (); } Il codice appena visto non funziona, lancia un NullPointerException perché sta tentando di accedere ad un oggetto non ancora inizializzato. Per farlo funzionare bisogna inizializzare ogni singolo contatore con una new!! Contatore[] contatori = new Contatore[3]; for(int i=0; i<contatori.length; i++) contatori[i] = new Contatore(); contatori[0].inc(); Fondamenti di informatica A-K - Domenico Di Carlo
12
Una migliore visione degli array Fondamenti di informatica A-K - Domenico Di Carlo
13
Esercizio 1 Realizzare una applicazione java (classe Esercitazione 51) che: ▫ Contenga un array di stringhe che modellino dei libri, del tipo : String[] libri = new String[7]; libri[0] = "Camere Separate"; … libri[3] = new String("Un libro a caso"); … libri[6] = "La Divina Commedia"; ▫ Chieda all’utente un titolo di libro ▫ Verifichi se il libro è presente nell’elenco (utilizzare la equals) ▫ In caso affermativo, stampi a video la posizione (indice dell’array) in cui è il titolo stato trovato ▫ In caso negativo, stampi “Libro non trovato” Fondamenti di informatica A-K - Domenico Di Carlo
14
Esercizio 2 e 3 Dato un array di N interi inizializzato in modo tale da contenere in ogni indice l’intero corrispondete : ▫ arrayInteri[0] = 0; … ▫ arrayInteri[4] = 4; … ▫ arrayInteri[N] = N; scrivere un algoritmo (classe Esercitazione 52) per sommare tutti gli elementi ad indici multipli di 3. Dato un array di N caratteri scrivere un algoritmo (classe Esercitazione 53) per verificare se l’ordine dei caratteri determina una sequenza palindroma (cioè che non cambia se letta al contrario; ad esempio ‘anna’ è palindroma, ‘mamma’ non è palindroma). Fondamenti di informatica A-K - Domenico Di Carlo
15
Esercizio 4 Un libro è identificato dal suo titolo e dal suo autore. Definire la classe Libro che: ▫ Possieda due campi di tipo stringa che identifichino autore e titolo ▫ Possieda un costruttore con parametri, definito opportunamente ▫ Presenti metodi che permettono di accedere ai campi interni ▫ Presenti il metodo “toString” che fornisca una descrizione del libro ▫ Presenti il metodo “equals” che verifichi se il libro sia uguale a quello passato come parametro (l’uguaglianza va verificata sul titolo). Nota bene : è possibile utilizzare equals all’interno del metodo equals, in quanto i campi interni sono già delle stringhe. Definire un’altra classe che (Esercitazione 54) ▫ Chieda all’utente il nome di un autore ▫ Se ci sono, stampi a video tutti i libri scritti da quell’autore Fondamenti di informatica A-K - Domenico Di Carlo
16
Esercizio 5 Si estendano le funzionalità della classe Libro (definita nell’Esercizio4) aggiungendo il seguente metodo statico: ▫ public static int conta(Libro lib, Libro[] bib); che restituisca il numero di libri in biblioteca che sono uguali a “lib” (si utilizzi il metodo equals definito in precedenza). Si realizzi poi una applicazione (Esercitazione55) che: ▫ chieda all’utente un titolo ed un autore di libro ▫ controlli quante copie ne sono presenti in biblioteca ▫ se ve ne è almeno una, informi l’utente che il libro è presente ▫ in caso contrario, lo informi della sua assenza. Fondamenti di informatica A-K - Domenico Di Carlo
17
Esercizio 6, difficilissimo quasi impossibile Realizzare una classe Studente composta da : Un array di 5 interi che modellino 5 voti dello studente Tre stringhe rappresentati il nome, cognome e numero di matricola I metodi : ▫ public int[] getVoti() ◦ che permetta di ritornare i voti conseguiti dallo studente ▫ public String getNome(), public String getCognome(), public String getMatricola() ▫ public boolean inserisciVoto(int voto) ◦ che permetta di di popolare l’array dei voti con dei numeri compresi tra 18 e 30 ▫ public double calcolaVotoDiPartenza(int annoDiLaurea) ◦ che calcoli il voto di partenza per la laurea triennale in 110esimi. Il calcolo deve essere effettuato tenendo conto degli anni impiegati per conseguire la laurea. Se ci si è laureati in tempo, il voto di laurea deve essere moltiplicato per 1.0325, se ci si è impiegato 4 anni deve essere moltiplicato per 1.01. In ogni altro caso deve essere semplicemente essere x = media*110/30; Realizzare un’altra classe (Esercitazione56) che : istanzi uno studente tramite apposito costruttore chieda all’utente di inserire i voti dello studente chieda all’utente gli anni necessari al conseguimento della laurea calcoli il voto di partenza della laurea espresso in 110esimi Fondamenti di informatica A-K - Domenico Di Carlo
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.