Il 0% ha trovato utile questo documento (0 voti)
3 visualizzazioni38 pagine

04-Str Math Scanner

Il documento tratta delle classi String, Math e Scanner in Java, evidenziando le loro funzionalità e utilizzi. Viene spiegato come gestire le stringhe, effettuare operazioni matematiche e leggere input da tastiera. Inoltre, si forniscono esempi pratici per illustrare le operazioni comuni e le conversioni di tipo.

Caricato da

atteo16032005
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
3 visualizzazioni38 pagine

04-Str Math Scanner

Il documento tratta delle classi String, Math e Scanner in Java, evidenziando le loro funzionalità e utilizzi. Viene spiegato come gestire le stringhe, effettuare operazioni matematiche e leggere input da tastiera. Inoltre, si forniscono esempi pratici per illustrare le operazioni comuni e le conversioni di tipo.

Caricato da

atteo16032005
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

String, Math e Scanner

Corso di Programmazione
Laurea in Informatica per il Management – A.A. 2024/25

Prof. Roberto Amadini


String, Math e Scanner
• In questo modulo vedremo alcune classi che ci saranno
molto utili:
– String
– Math
– Scanner
• …Senza approfondire troppo il significato di “classe”
– Per ora, pensate ad una classe come a un
contenitore di dati (variabili) e operazioni (metodi)
– Oggetto = elemento o istanza di una certa classe
(stessi metodi, dati possibilmente diversi)
Stringhe
• Una stringa di lunghezza k è una sequenza di k ≥ 0
caratteri consecutivi
– La stringa vuota ha lunghezza 0

• In Java ogni carattere è memorizzato internamente come


un 16-bit Unicode character

• Ogni carattere della stringa ha un indice associato,


corrispondente alla sua posizione nella stringa
– Gli indici partono da 0
String
• La classe String di Java permette di creare stringhe
immutabili
– Una volta create non possono essere modificate
– Non sono costanti: possono essere sovrascritte

• Le costanti di stringa (literals) sono sequenze di


caratteri delimitate da doppi apici, ad es. “Hello”
– Stringa vuota: “”
H e l l o
0 1 2 3 4
• Gli indici vanno da 0 a n-1
dove n è la lunghezza della stringa
Concatenazione
• L’operazione più comune fra stringhe è probabilmente la
concatenazione (operazione binaria infissa)
– “appendo” una stringa alla fine di un’altra

• In Java per concatenare stringhe si usa l’operatore +


– Overloading: il simbolo + è usato anche per la somma

• Attenzione: se in a+b un’espressione fra a e b è di tipo


stringa, l’altra viene convertita in stringa, se necessario
– Es. il numero 42 viene convertito nella stringa “42”
Esempio

String first = "William";


String middle = "James";
String last = "Duncan";
String fullName =
first + " " + middle + " " +
last;
fullname diventa "William James Duncan"

Quante stringhe ci sono in questo programma?


Esempio

"The sum of " + x + " and " +


y + " is " + x + y

Se x è il numero 3 e y è il numero 4, la stringa diventa:


"The sum of 3 and 4 is 34"

Perchè?
Davvero voglio
questo?
Esempio

"The sum of " + x + " and " +


y + " is " + x + y

Se x è il numero 3 e y è il numero 4, la stringa diventa:


"The sum of 3 and 4 is 34"
perchè almeno un operando della concatenazione è
una stringa: il numero 3 viene convertito implicitamente
nella stringa “3” e il numero 4 nella stringa “4” quindi
x + y è la concatenazione di “3” e “4”, cioè “34”
Esempio

"The sum of " + x + " and " +


y + " is " + (x + y)

Se x è il numero 3 e y è il numero 4, la stringa diventa:


"The sum of 3 and 4 is 7"
perchè prima viene effettuata la somma tra x e y, e
poi il risultato (7) viene convertito nella stringa “7”
Da numeri a stringhe
• La conversione numero→ stringa è implicita se almeno
un operando dell’operazione + è una stringa
– Possiamo comunque farlo esplicitamente, es.
int age = 34;
float area = 2.24;
String s1 = age + “”, s2 = “” + area;

• Attenzione! Conversioni di questo tipo:


String s1 = (String) age;
non sono sintatticamente corrette! error: incompatible
types: int cannot be converted to String
Operazioni su stringhe
• Vediamo ora una panoramica delle operazioni più
comuni offerte classe String
– Più precisamente, vedremo metodi di String
• Metodo = operazione offerta da una certa classe
• Invocare un metodo = richiamare una certa operazione

• Abbiamo già invocato il metodo println


[Link](“Hello, world”)

• Quali altre operazioni hanno senso sulle stringhe?


Lunghezza e Selezione
• int length()
• Ritorna la lunghezza di una stringa, es.
String name = "Harry";
– int len = [Link](); // len = 5

• char charAt(int i)
• Ritorna il carattere in posizione i, es.
String s = "Hello";
chat c = [Link](1); // c = ‘e’
Lunghezza e Selezione
int length()

Tipo di Nome del Parametri del


ritorno metodo metodo

Attenzione!!! charAt ritorna


char charAt(int i) un carattere della stringa, ma
non può essere utilizzato per
modificare un carattere della
stringa: gli oggetti di tipo String
sono immutabili
Attenzione!
String s = “hello”; // Ok
s = s + “ world”; // Ok
char c = s[2]; // Non compila
[Link](0) = ‘H’; // Non compila
char d = “foo”.charAt(3); // Compila ma...

• Esistono classi come StringBuilder che permettono


l’implementazione di stringhe mutabili
– La vedremo più avanti nel corso…
Altre operazioni
• String substring(int i)
– Ritorna la sottostringa dall’indice i fino a fine stringa
• String substring(int i, int j)
– Ritorna la sottostringa tra gli indici i e j-1
• String trim()
– Rimuove i whitespaces a inizio e fine stringa
• String toLowerCase()
– Converte tutti i caratteri in minuscolo
• String toUpperCase()
– Converte tutti i caratteri in maiuscolo
Esempio
int d = 531452;
[Link](sd);
String sd = "" + d;
int len = [Link]();
sd = "$" + [Link](0,len-3)
+ "," + [Link](len-3);
[Link](sd);
sd += "\t\tdollars\n\n\n";
[Link](sd); Cosa stampa?
sd = [Link]();
[Link]([Link]());
Esempio
> javac [Link]
Process javac exited with code 0

> java HelloPrinter


$531,452
$531,452 dollars

$531,452 DOLLARS
Process java exited with code 0
Esempio
> javac [Link]
Process javac exited with code 0

> java HelloPrinter


$531,452
$531,452 dollars
\t\t
\n\n\n
\t\t

$531,452 DOLLARS
Process java exited with code 0
Sequenze di Escape
• Java usa le sequenze di escape per stampare alcuni
caratteri speciali, ad es.
\n newline
\t tab
\\ backslash (per stampare \)
\" double quote (per stampare ")
\' single quote (per stampare ')

• Attenzione! Sono memorizzati come singoli caratteri,
non doppi (es. ASCII(‘\t’) = 9, ASCII(‘\n’) = 10, …)
Esempio
[Link]("Person\tHeight\tShoe size");
[Link]("=========================");
[Link]("Hannah\t5'1\"\t7");
[Link]("Jenna\t5'10\"\t9");
[Link]("JJ\t\t6'1\"\t14");

Provate!

Person Height Shoe size


==================
Hannah 5'1" 7
Jenna 5'10“ 9
JJ 6'1“ 14
Ricerca
• Un’altra operazione molto comune è la ricerca di una
certa stringa “pattern” in un’altra stringa “target”, es.

• int indexOf(char c)
– Ritorna l’indice della prima occorrenza del carattere
c a partire dall’inizio della stringa (cioè dall’indice 0)
• int indexOf(char c)
– Come sopra, ma a partire dall’indice i
• int indexOf(String s)
• int indexOf(String s, int i)
– Come sopra, ma il pattern è una stringa s
Esempio
String target = "This is the target string";

[Link](‘u’) /* Ritorna -1: il


carattere ‘u’ non occorre in target */

[Link](”the”) /* Ritorna 8: il primo


pattern ”the” comincia all’indice 8 */

[Link](”target”, 13) /* Ritorna -1,


eppure la sottostringa ”target” è presente…
perché? */
Print e Println
• I metodi print e println hanno diverse “versioni”
– print(int n)
– print(double d)
– print(String s)
– println(int n)
– println(double d)
– println(String s)
– println()
• La differenza è che println “va a capo” dopo la
stampa
Esempio
[Link]("Person\tHeight\tShoe size\n");
[Link]("=========================\n");
[Link]("Hannah\t5'1\"\t7\n");
[Link]("Jenna\t5'10\"\t9\n");
[Link]("JJ\t\t6'1\"\t14\n");

Provate!

Person Height Shoe size


==================
Hannah 5'1" 7
Jenna 5'10“ 9
JJ 6'1“ 14
La Classe Math
Corso di Programmazione
Laurea in Informatica per il Management – A.A. 2024/25

Prof. Roberto Amadini


Math
• La classe Math fornisce diverse operazioni matematiche
avanzate, ad es.
– [Link](x) radice quadrata di x
– [Link](x) arrotonda x al long più vicino
– [Link](x,y) calcola x elevato ad y
– [Link](x) seno di x in radianti
– [Link](x) coseno di x in radianti
– [Link](x) tangente di x in radianti
– [Link](x) funzione esponenziale ex
– [Link](x) logaritmo naturale
– ...
Round
• Per arrotondare un valore double all’intero più vicino
si può usare [Link]

• [Link] ritorna un long: se vogliamo un int serve


un cast, ad es.
int i = (int) [Link](3.7) // i = 4
double x = 2.1;
int j = (int) [Link](x); // j = 2
Round
• Se x è una variabile double, con:
[Link](x * 100) / 100.0
si arrotonda x a 2 cifre decimali
– Es. x = 123.456 → [Link](x * 100) /
100.0 = [Link](12345.6) / 100.0 =
12346 / 100.0 = 123.46
– Provate!

• E se volessimo arrotondare a k cifre decimali?


Random
• [Link]() restituisce un numero double
(pseudo-)casuale nell’intervallo [0.0, 1.0)

• E.g. x = [Link]() assegna ad x un valore


casuale tra 0.0 (incluso) e 1.0 (escluso)
– Ogni volta che rieseguo l’assegnamento il valore di x
sarà (probabilmente...) differente
– Scrivete un programma Java con una sola istruzione:
[Link]([Link]())
– ...ed eseguitelo più volte, senza ricompilarlo
Random
• Per generare un intero casuale, basta fare il cast
– (int)([Link]() * 10) genera un intero
casuale tra 0 e 9
– (int)([Link]() * 5 + 2) genera un
intero casuale tra 2 e 6

• In generale, (int)(a + [Link]() * b)


genera un intero casuale tra a e a+b-1
– Quindi, per generare un intero casuale in [a..b] posso
fare (int)(a + [Link]()*(b – a + 1))
Random
• Si possono usare anche metodi della classe Random,
che per ora non vediamo
La Classe Scanner
Corso di Programmazione
Laurea in Informatica per il Management – A.A. 2024/25

Prof. Roberto Amadini


Scanner
• Così come esiste [Link]() per l’output,
esiste [Link]() per l’input
– Non è il massimo: legge un solo byte (compresi
whitespaces) e ne restituisce il codice ASCII

• La classe Scanner permette invece permette di leggere


input di tipo diverso da sorgenti diverse
– Per ora, consideriamo solo la tastiera (std input) che
di default corrisponde in java a [Link]
Scanner
• Per poter usare oggetti di tipo Scanner, va sempre
inserita questa riga a inizio programma:
import [Link];

• Per creare un oggetto Scanner per leggere da tastiera:


Scanner scan = new Scanner([Link]);

• Una volta creato, possiamo utilizzarne i metodi per


leggere dati di diverso tipo da tastiera, ad es.
String answer = [Link]();
next e nextLine
• Il metodo nextLine legge una stringa (anche gli spazi)
finchè non si digita INVIO e ritorna quanto letto
– Esercizio: scrivere un programma [Link] che
“faccia l’eco”, cioè legga una stringa da tastiera e poi
la stampi a video così com’è

• Attenzione! il metodo next() è simile ma diverso!


– nextLine legge fino a una newline (‘\n’)
– next legge fino a un whitespace (spazi, tab, new
line..) e ritorna la stringa letta (token), whitespace
escluso
next*
• Ce n’è per tutti i tipi:
– boolean nextBoolean()
– byte nextByte()
– short nextShort()
– int nextInt()
– long nextLong()
– float nextFloat()
– double nextDouble()
– char nextChar() NON ESISTE!
useLocale
• Per leggeri numeri con la virgola, si possono usare
nextFloat o nextDouble
• Se avete settato il vostro PC in italiano, è possibile che
dobbiate scrivere il numero con la “,” e non con il “.”
– Es: 1,4 invece di 1.4
• Se volete usare il punto invece della virgola:
– Usate import [Link].*; invece di import
[Link];
– Se scan è l’oggetto Scanner, scrivete l’istruzione:
[Link]([Link]);
Esempio
import [Link].*;

Scanner scan = new Scanner ([Link]);
[Link]([Link]);

double base, altezza, area;

[Link]("Inserisci la base: ");


base = [Link]();
altezza = 12.0;
area = base * altezza / 2;
[Link]("area = " + area);
Provate!

Potrebbero piacerti anche