← Índex del curs Exercicis

Unitat 4. Utils del JDK

Unitat Didàctica 4:

En aquesta unitat aprendràs:

Lectura de dades per teclat amb Scanner
Tractament i manipulació de text amb String
Càlculs i constants matemàtiques amb Math
Generació de valors aleatoris amb Random

1. Scanner

La utilitat Scanner ens permet llegir les dades introduïdes per teclat a la consola. A diferència de IO.readln(), l'Scanner permet llegir diverses dades en una mateixa línia.

Per començar a llegir, preparem un lector (scanner) vinculat a l'entrada estàndard del sistema (System.in):

Scanner scanner = new Scanner(System.in);

Segons el tipus de dada que esperem rebre, farem servir el mètode adequat:

void main() { Scanner scanner = new Scanner(System.in); print("Com et dius? "); String nom = scanner.nextLine(); print("Quants anys tens? "); int edat = scanner.nextInt(); print("Quina alçada tens en metres (ex: 1,75)? "); double alcada = scanner.nextDouble(); println("Hola " + nom + ", tens " + edat + " anys i fas " + alcada + "m!"); }

nextLine() descarta els salts de línea (\n), els altres métodes deixen el salt de línea al búffer.


Exemple de Scanner
Exemple de Scanner

InputMismatchException

Si l'scanner es troba amb un valor que no coincideix amb el tipus de dada esperat, es produirà una excepció i el programa s'aturarà.

2. String

Operacions bàsiques amb String

Aquestes són les operacions més habituals que utilitzaràs per treballar amb text:

void main() { String nom = " Maria Garcia "; println("Original: '" + nom + "'"); println("Longitud: " + nom.length()); println("Sense espais: '" + nom.trim() + "'"); println("En majúscules: " + nom.toUpperCase()); println("Primer caràcter: " + nom.trim().charAt(0)); println("Conté 'Garcia'? " + nom.contains("Garcia")); println("Subcadena (0..5): " + nom.trim().substring(0, 5)); // Maria println("Substitució: " + nom.replace("Garcia", "Pérez")); println("És igual a 'Maria Garcia'? " + nom.trim().equals("Maria Garcia")); println("Dues vegades: " + nom.repeat(2)); // Maria Garcia Maria Garcia // REPEAT println("-".repeat(20)); // -------------------- // SPLIT String frase = "Hola, com estàs?"; String[] paraules = frase.split(" "); // paraules = { "Hola,", "com", "estàs?" } println("Paraules de la frase:"); println(paraules[0]); // Hola, println(paraules[1]); // com println(paraules[2]); // estàs? // SPLIT String[] noms = "Anna;Joan;Pere;Laura".split(";"); // noms = { "Anna", "Joan", "Pere", "Laura" } // SPLIT String[] parts = "27/10/1981".split("/"); // parts = { "27", "10", "1981" }

Format de dades amb .formatted()

Quan hem de mostrar xifres amb un nombre concret de decimals, alinear columnes o construir missatges amb variables, podem aplicar el mètode .formatted(...) directament sobre qualsevol cadena de text o Text Block:

Els especificadors de format més comuns són:

void main() { String producte = "Portàtil"; double preu = 899.95; int quantitat = 2; // .formatted() substitueix els especificadors pels valors indicats: String linia = "Producte: %-12s | Unitats: %2d | Preu: %8.2f €".formatted(producte, quantitat, preu); println(linia); String total = "Total a pagar: %.2f €".formatted(preu * quantitat); println(total); // Funciona de manera idèntica amb Text Blocks per a plantilles multilínia: String factura = """ =========== FACTURA SIMPLIFICADA =========== Article: %s Total: %.2f € ============================================ """.formatted(producte, preu * quantitat); println(factura); }

Observa l'ús de les cometes triples """...""" per a definir cadenes de text multilínia.

3. Math

Math proporciona un conjunt complet de funcions i constants matemàtiques.

S'utilitza escrivint directament Math. seguit del nom de l'operació o constant que necessitem:

void main() { double radi = 5.0; double area = Math.PI * Math.pow(radi, 2); println("Àrea del cercle: " + area); double arrel = Math.sqrt(144); println("Arrel de 144: " + arrel); // 12.0 println("Màxim entre 45 i 80: " + Math.max(45, 80)); // 80 println("Mínim entre 45 i 80: " + Math.min(45, 80)); // 45 println("Valor absolut de -15: " + Math.abs(-15)); // 15 println("Arrodonir 4.7: " + Math.round(4.7)); // 5 println("Sòl (floor) de 4.7: " + Math.floor(4.7)); // 4.0 println("Sostre (ceil) de 4.2: " + Math.ceil(4.2)); // 5.0 }

4. Random

Podem utilitzar la utilitat Random quan volem generar valors a l'atzar amb més flexibilitat (nombres enters en intervals concrets, daus, cartes, simulacions,...)

Primer preparem el generador:

Random random = new Random();

I després podem utilitzar les seves operacions:

void main() { Random random = new Random(); // Simulació d'un dau de 6 cares: int dau = random.nextInt(1, 7); println("Ha sortit el dau: " + dau); // Llançament d'una moneda: boolean esCara = random.nextBoolean(); println("Ha sortit cara? " + esCara); // Probabilitat decimal: double percentatge = random.nextDouble() * 100; println("Percentatge d'èxit: %.1f%%".formatted(percentatge)); }

Exercicis Pràctics i Qüestionaris

Posa a prova el que has après completant els qüestionaris interactius auto-avaluables i els reptes de programació.

Exercicis