Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe...

36
Fopndamenti di programmazione

Transcript of Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe...

Page 1: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

Fopndamenti di programmazione

Page 2: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

2

La classe String

• Una stringa è una sequenza di caratteri• La classe String è utilizzata per memorizzare

caratteri• La classe String ha metodi che consentono di operare

su stringhe• Costanti di tipo String: uno o più caratteri

racchiusi tra doppi apici• Esempi:

char charVariable = `a`; // apici singoli

String stringVariable = “a”; // doppi apici

String sentence = “Hello, world”;

Page 3: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

3

Variabili di tipo String

• Dichiarare una variabile di tipo String:– String greeting;

• Assegnare un valore alla variabile:– greeting = “Hello!”;

• Utilizzare la variabile come parametro di tipo String nella chiamata di un metodo:– System.out.println(greeting);

• stampa sullo schermo la stringa Hello!

Page 4: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

4

Costruttori

• String(stringa): – greeting = new String("Hello!");

• Alloca memoria per ogni stringa anche se il parametro è lo stesso– diverso da non usare il costruttore

String s = "Hello!";String t = "Hello!";String u = new String("Hello!");String v = new String("Hello!");System.out.println(s==t); // stampa trueSystem.out.println(u==v); // stampa false

Page 5: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

5

Metodi

• length(): ritorna la lunghezza della stringa– greeting.length() ritorna 6

• toLowerCase(): ritorna la stringa con tutti caratteri minuscoli– greeting.toLowerCase() ritorna hello!

• toUpperCase(): ritorna la stringa con tutti caratteri maiuscoli– greeting.toUpperCase() ritorna HELLO!

Page 6: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

6

Metodo charAt(int p): ritorna il carattere nella posizione specificata» greeting.charAt(0) ritorna il carattere H mentre greeting.charAt(2) ritorna il carattere l

Metodo substring(int s, int e): ritorna la sotto-stringa dalla posizione s alla posizione e (esclusa) » greeting.substring(4,6) ritorna la stringa o!

Indice di un carattere• È un intero che, a partire da 0 per il primo carattere, specifica la posizione del carattere all’interno della stringa

H e l l o !

0 1 2 3 4 5

Page 7: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

7

Concatenazione di stringhe

• Operatore +:String name = “I am Elisa”;

System.out.println(greeting+” “+name);

sullo schermo appare:Hello! I am Elisa

•ricordarsi di includere gli spazi per una corretta viualizzaziome

Page 8: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

8

Sequenze escape• Come stampare caratteri speciali?

– Esempio: The word is “hard”• System.out.println(“The word is “hard””);

– Errore di compilazione: vede la stringa The word is ed è confuso da quello che segue

• Usare il carattere backslash (ovvero, \) per indicare il significato speciale dei doppi apici interni– System.out.println(“The word is \“hard\””);– la sequenza \” è detta essere una sequenza escape

Page 9: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

9

Commenti

• Scrivere commenti comprensibili ed utili• Non commentare ciò che è ovvio• Assumere che il lettore ha una conoscenza ragionevole

• Tipi di commenti:– // per commenti di una singola linea– /* … */ per commenti di più linee– /** … */ per commenti che producano documentazione HTML (appendice 10)

Page 10: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

10

Array• Nome unico per collezione di valori tutti dello stesso tipo di dati

• Più di un tipo primitivo, meno di un oggetto– metodi invocati con una notazione speciale– comportamento simile ad oggetti se usati come argomenti o come tipi di ritorno

– niente ereditarietà– simili ad una classe Java non completamente implementata

• Adatti per cicli (in particolare, cicli for)

Page 11: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

11

Creazione ed accesso

• Sintassi generale per la dichiarazione:Tipo_Base[] Nome_Array = new Tipo_Base[Lunghezza];

• Esempi:array di 80 caratteri:char[] symbol = new char[80];

array di 100 reali:double[] reading = new double[100];

array di 100 stringhe:String[] message = new String[100];

Page 12: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

12

Uso delle parantesi quadre• Per creare un nome di tipo

– esempio: int[] intArrayName; crea un nome di tipo "array di int"• tipo int diverso da tipo array di int• tipo del nome intArrayName, non tipo dei dati inclusi nell’array (che comunque sono di tipo int)

• Per creare un nuovo array– esempio: numArray = new int[100];

• Per accedere ad uno specifico elemento dell’array– esempio: System.out.println(numArray[3]);

Page 13: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

13

Terminologia

temperature[n + 2]

Nome

temperature[n + 2]

Indice - deve essere un int, - oppure un’espressione che ritorna un int

temperature[n + 2]

Variabili indicizzata o elemento

temperature[n + 2] = 32;

Valore della variabile indicizzata o elemento

Page 14: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

14

Lunghezza di un array• Specificata dal numero dentro le parentesi quadre al momento della dichiarazione– determina la quantità di memoria allocata per gli elementi dell’array• memoria allocata anche se agli elementi non è stato assegnato alcun valore

– determina il massimo numero di elementi che l’array può contenere

• Ottenuta mediante la sintassi .lengthString[] message = new String[20];

System.out.println(message.length);

• Determinata al momento della dichiarazione– non può essere modificata a meno di ridichiarare l’array

Page 15: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

15

Inizializzazione di array

• Gli elementi di un array possono essere inizializzati nell’istruzione di dichiarazione mediante una lista di valori (separati da virgole) all’interno di parentesi graffe– elementi non inizializzati ricevono un valore di default (ad esempio, ‘ ‘ per array di char)

– lunghezza di array determinata automaticamente se i valori sono inizializzati esplicitamente nella dichiarazione

• Esempio:double[] readings = {5.1, 3.02, 9.65};System.out.println(readings.length);- stampa 3, ovvero la lunghezza dell’array readings

Page 16: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

16

Dominio di indicizzazione• Indicizzazione di array usa

numerazione a partire da 0– primo elemento: indice 0– secondo elemento: indice 1– n-esimo elemento: indice n-1– ultimo elemento: indice length-1

• Esempio:int[] scores = {97, 86, 92, 71};

Indice: 0 1 2 3 Valore: 97 86 92 71

Page 17: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

17

Errore di indice fuori del dominio

• Usare un indice più grande di length-1 causa un errore in fase di esecuzione (non di compilazione)– viene rigettata un'eccezione di tipo ArrayOutOfBoundsException

• Altri linguaggi di programmazione (come C e C++) non causano neanche un errore in fase di esecuzione– una delle caratteristiche più "pericolose" di questi linguaggi è proprio il fatto che consentono di usare indici fuori del dominio

Page 18: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

18

Inizializzazione con ciclo

•Elaborazione di array facile da fare in un ciclo

•Ciclo for spesso usato per inizializzare un array

•Esempio:int[] a = new int[10];for(int i = 0; i < a.length; i++) a[i] = 0;

Page 19: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

19

Array, classi e metodiDato array di oggetti, i metodi della classe corrispondente possono essere usati sui singoli elementi

Rational[] numbers = new Rational[4]; numbers[0] = new Rational(3, 4); numbers[1] = new Rational(1, 4); numbers[2] = new Rational(4, 5); numbers[3] = new Rational(1, 5); Rational tot = numbers[0]; for (int i = 1; i < numbers.length; i++) { tot = numbers[i].add(tot); } System.out.println(tot.num+”/”+tot.den);

dichiara array di Rational

ogni elemento è unaistanza di Rational

usa il metodo add della classe Rational

Page 20: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

20

Array, elementi ed argomenti

• Array ed elementi possono essere usati come argomenti di un metodo e come tipi di ritorno– sia un elemento che un nome di array possono essere un argomento di un metodo

– i metodi possono ritornare un valore di un array oppure un nome di array (incluse le parentesi quadre)

Page 21: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

21

Esempio

nome di array come tipo di ritorno

un elemento di a è un argomento del metodo add

il nome v è un argomento del metodo computeSum

static Rational[] createArray() { Rational[] numbers = new Rational[4]; numbers[0] = new Rational(3, 4); numbers[1] = new Rational(1, 4); numbers[2] = new Rational(4, 5); numbers[3] = new Rational(1, 5); return numbers; } static Rational computeSum(Rational[] a) { Rational tot = a[0]; for (int i = 1; i < a.length; i++) tot = tot.add(a[i]); return tot; } public static void main(String[] a) { Rational[] v = createArray(); Rational r = computeSum(v); System.out.println(r.num+”/”+r.den); }

Page 22: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

22

Nomi di array come argomenti

• Quando si usa un intero array come argomento di un metodo:– si indica solo il nome dell'array senza le parentesi quadre

– il metodo ha accesso all'array originale e può modificare i valori dei suoi elementi

– la lunghezza dell'array passato come argomento può essere diversa ad ogni invocazione• quando si definisce il metodo non si sa la lunghezza dell'array che verrà passato– utilizzare length all'interno del metodo per evitare una eccezione di tipo ArrayIndexOutOfBoundsException

Page 23: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

23

Esempio

Rational computeSum(Rational[] a){

if (a.length==0)return null;

Rational tot = a[0]; for (int i=1; i<a.length; i++) tot = tot.add(a[i]);

return tot; }

l'argomento del metodo è il nome di un array di razionali

usa length per evitare eccezioni dovute ad indice fuori del dominio

usa length per controllare il ciclo

Page 24: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

24

Array ed operatore =int[] a = new int[3];

int[] b = new int[3];

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

a[i] = i;

b = a;

System.out.println(a[2] + " " + b[2]);

a[2] = 10;

System.out.println(a[2] + " " + b[2]);

Non crea una copia dell'array a matrasforma b in un altro nome per l'array a

Output:2 210 10

Un valore cambiato in aè lo stesso valore ottenuto con b

Page 25: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

25

Array ed operatore ==int i;int[] a = new int[3];int[] b = new int[3];for(i=0;i<a.length;i++) a[i] = 0;for(i=0;i<b.length;i++) b[i] = 0;if(b == a) System.out.println("a equals b");else System.out.println("a does not equal b");

a e b sono entrambi array di 3 elementi di tipo int

a tutti gli elementi di a e b viene assegnato il valore 0

verifica se gli indirizzi di a e b sono uguali, non se i valori degli array sono uguali

L'output di questo codice sarà a does not equal b perché gli indirizzi dei due array non sono uguali

Page 26: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

26

Uguaglianza tra array• Per verificare se due array sono uguali bisogna definire un metodo equals che ritorna il valore true se e solo se gli array hanno la stessa lunghezza e tutti gli elementi corrispondenti sono uguali

public boolean equals(int[] a, int[] b) { boolean match; if (a.length != b.length) match = false; else { match = true; int i = 0; while (match && (i<a.length)) { if (a[i] != b[i]) match = false; i++; } } return match; }

Page 27: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

27

Metodi che ritornano un array

• Un altro esempio di passaggio per riferimento

• In pratica, non viene restituito l'array, ma il suo indirizzo

• Il nome della variabile a cui l'array viene assegnato è semplicemente un altro nome per l'array ritornato dal metodo

Page 28: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

28

Buone regole di programmazione

• Usare nomi singolari piuttosto che plurali migliora la leggibilità– sebbene un array contenga molti elementi, l'uso più frequente del suo nome sarà per indicizzare un singolo elemento

• Non affidarsi ai valori iniziali di default per gli elementi di un array– inizializzare esplicitamente gli elementi nella dichiarazione oppure in un ciclo

Page 29: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

29

Ricerca in un array• Esistono molte tecniche per cercare un particolare valore all'interno di un array

• Ricerca sequenziale:– partire dall'inizio dell'array e procedere in sequenza finché il valore viene trovato oppure la fine dell'array viene raggiunta• oppure, partire dalla fine dell'array e procedere a ritroso finché il valore viene trovato oppure l'inizio dell'array viene raggiunto

– non è il modo più efficiente, ma funziona ed è facile da programmare

Page 30: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

30

Esempiopublic boolean inArray(int[] a, int x){boolean found = false;int i = 0;while ((! found) && (i<a.length)) {

if (x==a[i]) found = true;else i++;

}  return found;}

Page 31: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

31

Ordinare un array

• Ordinare un elenco di elementi è un compito molto frequente– ordinare numeri in modo crescente– ordinare numeri in modo decrescente– ordinare stringhe in modo alfabetico

• Vi sono molti modi per ordinare un elenco• Selection sort

– uno dei più facili– non il più efficiente, ma facile da capire e da programmare

Page 32: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

32

Algoritmo Selection Sort

• Per ordinare un array di interi in modo crescente:– cerca nell'array il numero più piccolo e scambialo con il primo elemento dell'array• la parte ordinata dell'array è ora il primo elemento, mentre quella non ancora ordinata sono i rimanenti elementi

– cerca nella parte non ordinata il numero più piccolo e scambialo con il secondo elemento dell'array

– ripeti la ricerca e lo scambio fino a quando tutti gli elementi sono al posto giusto• ogni iterazione aumenta di 1 la lunghezza della parte ordinata e diminuisce di 1 quella della parte non ordinata

Page 33: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

33

Il codicepublic void selectionSort(int[] a){

int i, j, indexOfNextSmallest, min, temp;for (i = 0; i < a.length - 1; i++){

min = a[i];indexOfNextSmallest = i;for (j = i+1; j < a.length; j++)

if (a[j] < min){

min = a[j];indexOfNextSmallest = j;

}temp = a[i];a[i] = a[indexOfNextSmallest];a[indexOfNextSmallest] = temp;

}}

Page 34: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

34

Esempioa[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]

7 6 11 17 3 15 5 19 30 14

7 6 11 17 3 15 5 19 30 14

3 6 11 17 7 15 5 19 30 14

3 6 11 17 7 15 5 19 30 14

3 5 11 17 7 15 6 19 30 14

3 5 11 17 7 15 6 19 30 14

3 5 6 17 7 15 11 19 30 14

Page 35: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

35

Il metodo main

• Il parametro formale di un metodo main è sempre un array di oggetti di tipo String. • La macchina virtuale java invoca il metodo main nell’applicazione che viene passata all’interprete• Il parametro di tipo array di stringhe, che solitamente viene chiamato args, rappresenta l’insieme di argomenti passati tramite la linea di comando all’interprete Java quando viene invocato.

Page 36: Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.

36

• Qualsiasi informazione passata dalla linea di comando viene memorizzata nell’array args per poter essere successivamente usata dal programma.

• Il parametro del metodo main è sempre un array di oggetti di tipo String, per cui se si ha bisogno di passare dalla riga di comando informazioni in altro formato, ad esempio numerico, il programma dovrà convertirle in formato stringa.