← Tornar a l'índex d'exercicis
Posa a prova els teus coneixements sobre les eines essencials del JDK: la lectura de dades per teclat amb Scanner, el tractament i manipulació de text amb String, els càlculs i constants amb Math, i la generació de valors aleatoris amb Random.
Declaració, inicialització i mètodes de lectura per consola segons el tipus de dada introduït.
Fes coincidir cada mètode de Scanner amb el tipus de dada que llegeix o el seu comportament:
nextLine()next()nextInt()nextDouble()nextBoolean()Si l'usuari escriu Pere Pi a la consola i prem Enter, què mostrarà el següent codi?
Pi, PerePere, PiPere Pi, Pere PiOrdena les línies de codi per crear un programa funcional que demane el nom de l'usuari i el salude:
Arrossega des d'ací (o clica dues línies per intercanviar-les):
void main() { Scanner scanner = new Scanner(System.in); print("Com et dius? "); String nom = scanner.nextLine(); println("Hola, " + nom + "!");}Tria l'opció correcta per completar la preparació del lector i la lectura de dades:
Scanner scanner = new Scanner(System.in);Scanner scanner = new Scanner(System.out);Scanner scanner = new Scanner();Scanner scanner = new Scanner("keyboard");double alcada = scanner.nextDouble();double alcada = scanner.nextInt();double alcada = scanner.readDouble();double alcada = scanner.next();boolean esSoci = scanner.nextBoolean();boolean esSoci = scanner.nextBool();boolean esSoci = scanner.readBoolean();boolean esSoci = scanner.next();Si invoquem el mètode next() i l'usuari introdueix el dígit 9 a l'entrada estàndard, de quin tipus de dada serà la variable que rebi el resultat?
StringintchardoubleOperacions fonamentals sobre cadenes de text: inspecció, subcadenes, comparacions, divisions i format amb .formatted().
Fes coincidir cada mètode de String amb la seva funció corresponent:
text.length()text.charAt(0)text.trim()text.substring(0, 4)text.replace("vell", "nou")text.split(";")Escriu el resultat exacte (sense cometes) que retorna cadascuna de les següents operacions sobre cadenes:
"Programació".length() | 11 |
"Java".charAt(2) | v |
" Hola ".strip() | Hola |
"Barcelona".substring(0, 4) | Barc |
"27/10/1981".split("/")[0] | 27 |
Donada la variable String s = "Java 26";, quines de les següents expressions booleanes avaluen a true?
s.contains("26")s.startsWith("Java")s.endsWith("26")s.equalsIgnoreCase("java 26")s.equals("java 26")s.startsWith("26")Quin especificador de format hem d'utilitzar amb .formatted() per a mostrar un decimal amb exactament dues xifres decimals?
%.2f%2d%s.2%.2decimalOrdena les línies de codi per construir i formatar una plantilla de factura simplificada utilitzant Text Blocks (cometes triples):
Arrossega des d'ací (o clica dues línies per intercanviar-les):
String producte = "Portàtil";double preu = 899.95;String factura = """ Article: %s Total: %.2f € """.formatted(producte, preu);println(factura);Constants matemàtiques, arrels quadrades, càlcul de potències, extrems, arrodoniments i generació decimal bàsica.
Emparella cadascuna d'aquestes operacions de Math amb el seu valor de retorn:
Math.floor(4.7)Math.ceil(4.2)Math.round(4.5)Math.sqrt(144)Math.pow(2, 4)Math.abs(-15)Quin és el tipus de dada retornat per la crida Math.pow(3, 2) i quin és el seu valor exacte?
double amb valor 9.0int amb valor 9float amb valor 9.0flong amb valor 9LEscriu el resultat numèric retornat per cadascuna de les següents instruccions de Math:
Math.max(45, 80) | 80 |
Math.min(45, 80) | 45 |
Math.abs(-99) | 99 |
Math.round(7.2) | 7 |
Math.round(7.8) | 8 |
Selecciona totes les afirmacions correctes sobre la classe Math:
Math.random() retorna un double aleatori entre 0.0 (inclòs) i 1.0 (exclòs).import per utilitzar Math, ja que pertany al paquet bàsic java.lang.Math.PI és una constant que conté el valor aproximat del nombre pi (3.14159...).Math.floor(x) arrodoneix sempre cap a l'enter superior més proper.Math.sqrt(x) retorna sempre un nombre enter (int).Quina és l'expressió correcta per generar un nombre enter aleatori entre 1 i 10 (ambdós inclosos) fent servir Math.random()?
(int) (Math.random() * 10) + 1(int) Math.random() * 10 + 1Math.random(1, 10)Math.round(Math.random() * 10)La classe java.util.Random per generar enters en intervals concrets, decimals i valors booleans.
Tenint un generador Random random = new Random();, emparella cada mètode amb el resultat que produeix:
random.nextInt(6)random.nextInt(1, 7)random.nextDouble()random.nextBoolean()Si executem int resultat = random.nextInt(10);, quin dels següents valors MAI no podrà ser assignat a la variable resultat?
10059Ordena les línies de codi per crear un programa que simuli el llançament de dos daus de 6 cares i n'imprimeixi la suma:
Arrossega des d'ací (o clica dues línies per intercanviar-les):
import java.util.Random;void main() { Random random = new Random(); int dau1 = random.nextInt(1, 7); int dau2 = random.nextInt(1, 7); println("Suma dels daus: " + (dau1 + dau2));}Selecciona la instrucció més idònia de l'objecte random per a cadascuna d'aquestes simulacions:
boolean esCara = random.nextBoolean();boolean esCara = random.nextInt(2);boolean esCara = random.nextDouble();boolean esCara = random.nextCoin();int carta = random.nextInt(1, 13);int carta = random.nextInt(12);int carta = random.nextInt(1, 12);int carta = random.nextDouble() * 12;double percentatge = random.nextDouble() * 100;double percentatge = random.nextInt(100);double percentatge = random.nextPercent();double percentatge = random.nextFloat();Quina és la diferència principal a l'hora d'utilitzar Random respecte a Math.random()?
Random requereix afegir import java.util.Random; i instanciar el generador amb new Random(), però ofereix mètodes més directes com nextInt(inici, fi) i nextBoolean().Math.random() requereix crear un objecte amb new Math() i Random s'utilitza de forma estàtica.Random només pot generar nombres enters i mai decimals.Comptador i analitzador de caràcters (Scanner + String)
Demana a l'usuari el seu nom complet mitjançant scanner.nextLine(). El programa ha de netejar els espais sobrants dels extrems amb trim() i mostrar:
replace(" ", "")).Generador d'àlies i correu institucional (String + split + formatted)
Demana a l'usuari el seu nom i el seu primer cognom en una sola línia separats per un espai (ex: "Gerard Falco"). Utilitza split(" ") per separar ambdues parts i genera un àlies combinant les 3 primeres lletres del nom i les 3 primeres lletres del cognom en minúscules amb substring(0, 3) i toLowerCase(). Finalment, mostra les dades formatades amb .formatted():
Calculadora geomètrica (Scanner + Math)
Demana a l'usuari la longitud dels dos catets d'un triangle rectangle ($a$ i $b$). Calcula la hipotenusa $c = \sqrt{a^2 + b^2}$ fent servir Math.sqrt() i Math.pow(). Després, demana el radi $r$ d'un cercle i calcula la seva àrea ($A = \pi \cdot r^2$) i el seu perímetre ($P = 2 \cdot \pi \cdot r$) amb Math.PI. Mostra els resultats amb 2 xifres decimals amb %.2f i el perímetre arrodonit amb Math.round():
Simulador de combat per torns (Random + Math)
Crea una simulació de combat entre un Heroi i un Monstre utilitzant Random:
random.nextInt(1, 7) cadascun) i en suma el valor base.random.nextBoolean() es determina si l'Heroi aconsegueix un cop crític (duplica l'atac).random.nextInt(1, 13)).Math.max() per determinar quin dels dos ha infligit més dany i mostra qui guanya la ronda.Tiquet de compra amb Text Blocks i format (Scanner + String formatting)
Demana a l'usuari el nom d'un article, el preu unitari en euros (scanner.nextDouble()) i la quantitat d'unitats (scanner.nextInt()).
Calcula el subtotal, l'IVA aplicat del 21% i el preu total final. Mostra un tiquet de caixa perfectament alineat utilitzant una plantilla multilínia
Text Block ("""...""") i especificadors de format (%15s, %3d, %8.2f €):
Analitzador de matrícules d'un vehicle (String)
Demana a l'usuari una matrícula en el format actual espanyol
(quatre xifres i tres lletres, per exemple, 4821KLM).
El programa ha de mostrar:
Generador de codis d'inventari (String + Math + formatted)
Demana el nom d'un producte i el número de prestatgeria on s'emmagatzema. Genera un codi d'inventari a partir de:
Calculadora de consum elèctric (Scanner + Math)
Demana la potència d'un aparell elèctric en watts, el nombre d'hores que funciona al dia i el preu del kWh. Calcula el consum diari i mensual (30 dies) en kWh, així com el cost mensual.
Math.round().Simulador d'una màquina recreativa (Random + Math)
Simula una tirada d'una màquina recreativa amb tres símbols
representats per nombres aleatoris entre 1 i 5.
Utilitza random.nextInt(1, 6) per generar-los.
Math.max().Math.min().Per a aquest exercici, no cal determinar si l'usuari ha guanyat ni aplicar premis segons el resultat.
Targeta d'embarcament (Scanner + String + Text Blocks)
Demana el nom complet d'un passatger, el codi del vol i el número del seient. Genera una targeta d'embarcament amb el format següent:
14C.
Utilitza toUpperCase(), substring(),
.formatted() i una plantilla multilínia
amb Text Blocks.
Calculadora de distàncies GPS (Scanner + Math)
Demana les coordenades X i Y de dos punts d'un mapa. Calcula la distància en línia recta entre aquests punts mitjançant la fórmula:
d = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2))
A continuació, calcula el temps necessari per recórrer aquesta
distància si un vehicle es desplaça a una velocitat constant
de 60 unitats per hora. Expressa el resultat en minuts i mostra
també el temps arrodonit amb Math.round().
Generador de contrasenyes temporals (Random + String)
Genera una contrasenya temporal de sis xifres. Cada xifra s'ha
d'obtindre amb una crida a random.nextInt(0, 10).
Concatena els resultats en una cadena de text.
La contrasenya s'ha de tractar com una cadena, no com un nombre, perquè pot començar per zero.
Factura d'un servei de missatgeria (Scanner + Math + formatted)
Demana el pes d'un paquet en quilograms, la distància d'enviament en quilòmetres i si el servei és urgent, representat per un valor booleà.
Calcula el preu final amb les tarifes següents:
Considera que el cost per distància és proporcional a la distància
recorreguda. Utilitza Math.ceil() per arrodonir
el nombre de trams de 10 km cap amunt.
Mostra un resum de la factura amb dos decimals.