Newest Viewed Downloaded

Espressioni booleane, confronti

Espressioni booleane, confronti

Operatori relazionali

All’interno delle parentesi tonde della condizione dell’if è possibile, come abbiamo visto, inserire il confronto tra due valori poiché questa espressione ha un valore di tipo boolean (true o false) Vediamo tutti gli operatori relazionali che possiamo usare nella seguente tabella

Operatori Relazionali

Diverso  != Uguale = == Minore o uguale  <= Minore < < Maggiore o uguale  >= Maggiore > > Descrizione Notazione matematica Operatore Java

Errore comune: = invece di ==

I programmatori ancora inesperti spesso confondono l’uso di = con == In particolare un errore comune è quello di inserire in un confronto l’operatore = invece che == if (a=5) b++; // Errore di compilazione L’espressione a=5, oltre ad essere un assegnamento e non un confronto, ha un valore di tipo int

Confronti di valori in virgola mobile

Gli operatori == o != non hanno molto senso applicati a valori in virgola mobile Un errore tipico è quello di cercare di controllare se un valore double (o float) sia uguale a 0.0 È molto improbabile che un double risultante da un calcolo sia esattamente zero Potrebbe essere invece un valore prossimo allo zero

Confronti di valori in virgola mobile

Prendiamo ad esempio questo semplice programma: double r = Math.sqrt(2); double d = r * r -2; if (d == 0) System.out.println("Radice quadrata di 2 per 2 meno 2 fa 0"); else System.out.println("Radice quadrata di 2 per 2 meno 2 fa " + d); Il valore stampato non è zero: d vale 4.440892098500626E-16 che è prossimo a zero, ma non è zero!

Confronti di valori in virgola mobile

In generale, per confrontare l’uguaglianza di due valori in virgola mobile è bene fissare una soglia EPSILON di tolleranza e vedere se i due valori sono sufficientemente prossimi rispetto a questa Per esempio si può definire final double EPSILON = 1E-14; E poi controllare se |x-y|  EPSILON. Se è vero si può decidere che i due valori vanno considerati “uguali”

Confronti di valori in virgola mobile

Tuttavia, se x e y sono valori molto grandi, la loro differenza potrebbe essere una quantità maggiore di EPSILON, ma comunque, vista la loro grandezza, essere irrisoria È bene, quando x e y non sono prossimi a zero, considerare la differenza dei due valori rapportata alla loro gandezza:

Confronti di valori in virgola mobile

In codice java: final double EPSILON = 1E-14; double x, y; ... if (Math.abs(x-y) / Math.max(Math.abs(x), Math.abs(y)) <= EPSILON) System.out.println(“\”Uguali\””); else System.out.println(“\”Diversi\””);

Confronto di Stringhe

Le stringhe in Java, lo sappiamo, sono oggetti Pertanto il valore di una variabile di frame di tipo String non è la stringa in sé, ma un riferimento all’oggetto stringa Se cercassimo di confrontare direttamente due variabili di tipo stringa staremmo semplicemente controllando se puntano allo stesso oggetto In quel caso sono sicuramente uguali, come stringhe, ma in genere ciò che ci interessa è sapere se il contenuto di due stringhe (oggetti stringa diversi) è lo stesso

Confronto di Stringhe

... String pippo = console.readLine(); String pluto = console.readline(); if (pippo == pluto) //falso System.out.println(“Stringhe Uguali”) else System.out,println(“Stringhe Diverse”) Per il confronto del contenuto di due stringhe dobbiamo usare il metodo equals della classe String Come tipico della programmazione ad oggetti, un operatore binario fra due oggetti viene realizzato con un metodo che va chiamato su uno dei due e a cui va passato un riferimento all’altro oggetto operando

Confronto di Stringhe

System.out.println("Inserisci una stringa"); String pippo = console.readLine(); System.out.println("Inserisci una seconda stringa per il confronto"); String pluto = console.readLine(); if ( pippo == pluto ) System.out.println("Confronto con == : Stringhe Uguali"); else System.out.println("Confronto con == : Stringhe Diverse"); if ( pippo.equals(pluto) ) System.out.println("Confronto con metodo equals: Stringhe” + “ Uguali"); else System.out.println("Confronto con metodo equals: Stringhe” + “ Diverse"); Inserendo due stringhe uguali il primo confronto fallisce, mentre il secondo ha successo

Confronto di Stringhe

La classe String fornisce anche operatori di confronto “corrispondenti” a <, > Il metodo compareTo ha un parametro String in ingresso e confronta la stringa su cui è chiamato con la stringa passata come parametro Il valore di uscita è un int il cui valore indica se la stringa passata è uguale, “maggiore” o “minore” nel senso di ordine alfabetico

Confronto di Stringhe

int r = string1.compareTo(string2); Se r > 0 allora string1 precede string2 nell’ordine alfabetico Se r < 0 allora string1 segue string2 nell’ordine alfabetico Se r == 0 allora le stringhe sono uguali (alternativa a equals)

Confronto di oggetti

Il discorso fatto per le stringhe si applica agli oggetti in generale Applicando l’operatore == a due variabili riferimento si controlla semplicemente se puntano allo stesso oggetto Se si vuole invece confrontare lo stato si deve fornire la classe di un metodo equals simile a quello che viene fornito con String

Showing 1 - 15 of 15 items Details

Name: 
Laboratorio11
Author: 
Mario Rossi
Company: 
N/A
Description: 
Espressioni booleane, confronti
Tags: 
stringhe | confronto | system | valori | due | println | out | stringa
Created: 
10/12/2004 9:31:00 AM
Slides: 
15
Views: 
4
Downloads: 
0
Rating: 
0


> Comment



Share this presentation
|

Comments

Share this presentation:

|
Sitemap