Saltar al contenido
java.test.java · devschool

Retos de Java

96 preguntas ordenadas como el curso de Java. Hazlas en orden o salta al tema que quieras repasar.

devschool $ 0 aciertos de 0 respondidas

¿Qué es Java?

¿Te atascas? Repasa la lección ¿Qué es Java?.

[Java] ¿Qué muestra este programa en la consola?
System.out.print("A");
System.out.println("B");
System.out.print("C");

[Java] Has compilado Hola.java en Windows y tienes Hola.class. ¿Qué necesitas para ejecutarlo en un ordenador con Linux?

Variables y tipos

¿Te atascas? Repasa la lección Variables y tipos.

[Java] ¿Qué tipo usarías para guardar un texto?

[Java] ¿Qué imprime este código?
double nota = 8.9;
int entera = (int) nota;
System.out.println(entera);

[Java] ¿Cuál de estas líneas NO compila?

Operadores

¿Te atascas? Repasa la lección Operadores.

[Java] ¿Qué muestra este código?
int a = 7;
int b = 2;
System.out.println(a / b);

[Java] ¿Cuál es la forma correcta de comparar el contenido de dos String?
String a = "hola";
String b = "hola";

[Java] ¿Qué imprime este código?
int x = 5;
int y = x++;
int z = ++x;
System.out.println(y + " " + z + " " + x);

[Java] ¿Qué imprime este código? (la barra / separa las dos líneas de salida)
System.out.println("Suma: " + 4 + 2);
System.out.println(4 + 2 + " es la suma");

Scanner

¿Te atascas? Repasa la lección Scanner.

[Java] El usuario escribe 30, pulsa Intro, escribe Pedro y pulsa Intro. ¿Qué muestra el programa?
import java.util.Scanner;

Scanner sc = new Scanner(System.in);
int edad = sc.nextInt();
String nombre = sc.nextLine();
System.out.println("[" + nombre + "] " + edad);

[Java] El usuario escribe: Ana María Soto. ¿Qué guarda la variable nombre?
Scanner sc = new Scanner(System.in);
String nombre = sc.next();

[Java] ¿Para qué sirve hasNextInt()?

[Java] Un programa crea un Scanner sobre System.in en un método, lo cierra con close() y, más tarde, otro método crea un Scanner nuevo sobre System.in y llama a nextLine(). ¿Qué pasa?

if, else y switch

¿Te atascas? Repasa la lección if, else y switch.

[Java] ¿Qué imprime este código?
int nivel = 1;
switch (nivel) {
    case 1:
        System.out.print("A");
    case 2:
        System.out.print("B");
        break;
    case 3:
        System.out.print("C");
}

[Java] ¿Qué imprime este código?
int nota = 9;
if (nota >= 5) {
    System.out.println("Aprobado");
} else if (nota >= 9) {
    System.out.println("Sobresaliente");
} else {
    System.out.println("Suspenso");
}

Bucles

¿Te atascas? Repasa la lección Bucles.

[Java] ¿Cuántas veces se ejecuta el bloque?
int i = 10;
do {
  System.out.println(i);
  i++;
} while (i < 5);

[Java] ¿Cuántos asteriscos imprime este código?
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        System.out.print("*");
    }
}

[Java] ¿Qué imprime este código?
int suma = 0;
for (int i = 1; i <= 6; i++) {
    if (i == 3) {
        continue;
    }
    if (i == 5) {
        break;
    }
    suma += i;
}
System.out.println(suma);

Cadenas

¿Te atascas? Repasa la lección Cadenas.

[Java] ¿Qué imprime este código?
String saludo = "  hola  ";
saludo.strip();
saludo.toUpperCase();
System.out.println("[" + saludo + "]");

[Java] ¿Qué imprime este código?
String archivo = "informe_final.pdf";
int punto = archivo.indexOf('.');
System.out.println(archivo.substring(punto + 1) + " " + archivo.substring(0, 7));

[Java] ¿Por qué se recomienda StringBuilder para construir un texto dentro de un bucle largo?

[Java] ¿Qué imprime este código?
String fecha = "30.09.2026";
String[] partes = fecha.split(".");
System.out.println(partes.length);

Math y envoltorios

¿Te atascas? Repasa la lección Math y envoltorios.

[Java] ¿Qué imprime este código?
System.out.println(Math.round(2.5) + " " + Math.floor(-2.5) + " " + Math.ceil(2.1));

[Java] ¿Qué expresión genera un número entero aleatorio entre 1 y 10, ambos incluidos?

[Java] ¿Qué imprime este código?
Integer a = 127, b = 127;
Integer c = 128, d = 128;
System.out.println((a == b) + " " + (c == d) + " " + c.equals(d));

[Java] ¿Qué ocurre al ejecutar esta línea?
int precio = Integer.parseInt("12.50");

Métodos

¿Te atascas? Repasa la lección Métodos.

[Java] ¿Qué significa void en un método?
public static void saludar() {
  System.out.println("Hola");
}

[Java] ¿Qué imprime este código?
static void cambiar(int[] datos, int numero) {
    datos[0] = 99;
    numero = 99;
}

// en main:
int[] v = {1, 2};
int n = 1;
cambiar(v, n);
System.out.println(v[0] + " " + n);

[Java] Con estos dos métodos sobrecargados, ¿qué imprime el código?
static void mostrar(int x) { System.out.print("int "); }
static void mostrar(double x) { System.out.print("double "); }

// en main:
mostrar(3);
mostrar(3.0);
mostrar('A');

Recursividad

¿Te atascas? Repasa la lección Recursividad.

[Java] ¿Qué imprime mostrar(3)?
static void mostrar(int n) {
    if (n == 0) return;
    mostrar(n - 1);
    System.out.print(n + " ");
}

[Java] ¿Qué ocurre al llamar a suma(3)?
static int suma(int n) {
    return n + suma(n - 1);
}

[Java] ¿Qué devuelve misterio(5)?
static int misterio(int n) {
    if (n <= 0) return 0;
    return n + misterio(n - 2);
}

[Java] ¿Por qué la versión recursiva ingenua de Fibonacci, fibonacci(n - 1) + fibonacci(n - 2), es tan lenta con n = 45?

Arrays

¿Te atascas? Repasa la lección Arrays.

[Java] ¿Qué muestra este código?
int[] notas = {7, 9, 5};
System.out.println(notas.length);

[Java] ¿Qué pasa con este código?
int[] numeros = new int[3];
numeros[3] = 10;

[Java] ¿Qué imprime este código?
int[] a = {1, 2, 3};
int[] b = a;
b[1] = 20;
System.out.println(a[1]);

[Java] Este código busca la temperatura más alta. ¿Qué imprime?
int[] t = {-5, -2, -9};
int max = 0;
for (int x : t) {
    if (x > max) max = x;
}
System.out.println(max);

Matrices

¿Te atascas? Repasa la lección Matrices.

[Java] ¿Qué imprime este código?
int[][] m = {{1, 2, 3}, {4, 5, 6}};
System.out.println(m.length + " " + m[0].length);

[Java] ¿Qué imprime este código?
int[][] c = {{2, 0, 1}, {3, 5, 0}, {1, 4, 7}};
int s = 0;
for (int i = 0; i < c.length; i++) {
    s += c[i][i];
}
System.out.println(s);

[Java] Tienes int[][] m = {{1, 2}, {3, 4}}. ¿Qué instrucción muestra [[1, 2], [3, 4]]?

[Java] ¿Qué imprime este código?
int[][] a = {{1, 2}, {3, 4}};
int[][] b = a.clone();
b[0][0] = 9;
System.out.println(a[0][0]);

Clases y objetos

¿Te atascas? Repasa la lección Clases y objetos.

[Java] ¿Cómo se crea un objeto de la clase Perro?

[Java] ¿Qué imprime System.out.println(new Gato("Misi").nombre)?
class Gato {
    String nombre;

    Gato(String nombre) {
        nombre = nombre;
    }
}

[Java] ¿Qué ocurre con la línea Libro l = new Libro(); si la clase es esta?
class Libro {
    String titulo;

    Libro(String titulo) {
        this.titulo = titulo;
    }
}

Encapsulación

¿Te atascas? Repasa la lección Encapsulación.

[Java] ¿Qué imprime este código?
class Contador {
    static int total = 0;
    int propio = 0;
    Contador() { total++; propio++; }
}

Contador c1 = new Contador();
Contador c2 = new Contador();
Contador c3 = new Contador();
System.out.println(Contador.total + " " + c3.propio);

[Java] ¿Qué ocurre con este código?
final List<String> generos = new ArrayList<>();
generos.add("Novela");
generos.add("Poesía");
System.out.println(generos.size());

[Java] ¿Qué imprime este código con un record?
record Punto(int x, int y) { }

Punto a = new Punto(1, 2);
Punto b = new Punto(1, 2);
System.out.println(a.equals(b) + " " + (a == b) + " " + a.x());

[Java] ¿Por qué no compila esta clase?
class Biblioteca {
    String nombre = "Central";

    static void mostrar() {
        System.out.println(nombre);
    }
}

Paquetes

¿Te atascas? Repasa la lección Paquetes.

[Java] Un atributo declarado sin modificador de acceso (int stock;), ¿desde dónde se puede usar?

[Java] Has compilado con javac -d out y la clase con main es es.devschool.tienda.app.Main. ¿Qué comando la ejecuta?

[Java] ¿Qué ocurre al compilar este código?
import java.util.*;

public class Prueba {
    public static void main(String[] args) {
        Function<String, Integer> f = String::length;
    }
}

[Java] El archivo está en src/es/devschool/tienda/modelo/Producto.java. ¿Qué primera línea debe tener?

Herencia

¿Te atascas? Repasa la lección Herencia.

[Java] ¿Qué imprime new B()?
class A {
    A() { System.out.print("A"); }
}
class B extends A {
    B() { System.out.print("B"); }
}

[Java] ¿Qué imprime este código?
class Empleado {
    double salario() { return 1000; }
}
class Gerente extends Empleado {
    @Override
    double salario() { return super.salario() + 500; }
}

Empleado e = new Gerente();
System.out.println(e.salario());

[Java] ¿Por qué no compila la clase Becario?
class Empleado {
    private String nombre;
    Empleado(String nombre) { this.nombre = nombre; }
}

class Becario extends Empleado {
    Becario() { }
}

[Java] Un coche tiene un motor. ¿Cómo lo modelarías?

Interfaces

¿Te atascas? Repasa la lección Interfaces.

[Java] Si Vehiculo es una clase abstracta, ¿qué ocurre con esta línea?
Vehiculo v = new Vehiculo();

[Java] ¿Qué imprime este código?
interface Saludo {
    String nombre();
    default String saludar() { return "Hola, " + nombre(); }
}
class Es implements Saludo {
    public String nombre() { return "Ana"; }
}

System.out.println(new Es().saludar());

[Java] ¿Qué imprime este código?
record Alumno(String nombre, double nota) implements Comparable<Alumno> {
    public int compareTo(Alumno otro) {
        return Double.compare(nota, otro.nota);
    }
}

List<Alumno> lista = new ArrayList<>(List.of(
        new Alumno("Ana", 7), new Alumno("Luis", 5), new Alumno("Eva", 9)));
Collections.sort(lista);
for (Alumno a : lista) System.out.print(a.nombre() + " ");

[Java] ¿Cuál de estas afirmaciones es correcta en Java?

Polimorfismo

¿Te atascas? Repasa la lección Polimorfismo.

[Java] ¿Qué imprime este código?
class Animal {
    String sonido() { return "..."; }
}
class Perro extends Animal {
    @Override
    String sonido() { return "Guau"; }
}

Animal a = new Perro();
System.out.println(a.sonido());

[Java] Circulo y Rectangulo heredan de Figura. ¿Qué ocurre con este código?
Figura f = new Circulo();
Rectangulo r = (Rectangulo) f;
System.out.println("ok");

[Java] ¿En qué caso decide la JVM, mientras el programa se ejecuta, qué método se llama?

[Java] ¿Qué imprime este código?
Object o = "Java";
if (o instanceof String s && s.length() > 3) {
    System.out.println(s.toUpperCase());
} else {
    System.out.println("no");
}

Enums

¿Te atascas? Repasa la lección Enums.

[Java] ¿Qué imprime este código?
enum Talla { S, M, L, XL }

System.out.println(Talla.valueOf("L").ordinal() + " " + Talla.values().length);

[Java] Con el enum Talla { S, M, L, XL }, ¿qué hace Talla.valueOf("m")?

[Java] ¿Qué imprime este código?
enum Envio {
    NORMAL(4), URGENTE(1);

    private final int dias;
    Envio(int dias) { this.dias = dias; }
    int getDias() { return dias; }
}

System.out.println(Envio.URGENTE.getDias() + Envio.NORMAL.getDias());

[Java] ¿Cuál es la principal ventaja de un enum frente a constantes int como PENDIENTE = 0, PAGADO = 1?

Excepciones

¿Te atascas? Repasa la lección Excepciones.

[Java] ¿Qué imprime este código?
try {
    System.out.print("A ");
    int x = 5 / 0;
    System.out.print("B ");
} catch (ArithmeticException e) {
    System.out.print("C ");
} finally {
    System.out.print("D ");
}
System.out.println("E");

[Java] ¿Cuál de estas excepciones es checked, es decir, el compilador obliga a capturarla o declararla con throws?

[Java] ¿Por qué no compila este código?
try {
    int n = Integer.parseInt(texto);
} catch (Exception e) {
    System.out.println("Error general");
} catch (NumberFormatException e) {
    System.out.println("No es un número");
}

[Java] ¿Qué diferencia hay entre throw y throws?

ArrayList

¿Te atascas? Repasa la lección ArrayList.

[Java] ¿Qué imprime este código?
List<Integer> puntos = new ArrayList<>(List.of(5, 1, 3, 1));
puntos.remove(1);
System.out.println(puntos);

[Java] ¿Qué imprime este código?
List<String> l = new ArrayList<>();
l.add("a");
l.add("b");
l.add(0, "c");
l.set(1, "d");
System.out.println(l + " " + l.size());

[Java] ¿Qué ocurre al ejecutar este código?
List<String> dias = List.of("lunes", "martes");
dias.add("miércoles");

[Java] Tienes una lista de productos y quieres ordenarla de mayor a menor precio y, si empatan, por nombre. ¿Qué Comparator usas?

HashMap y HashSet

¿Te atascas? Repasa la lección HashMap y HashSet.

[Java] ¿Qué imprime este código?
Map<String, Integer> votos = new HashMap<>();
votos.put("Ana", 3);
votos.put("Luis", 5);
votos.put("Ana", 7);
System.out.println(votos.size() + " " + votos.get("Ana"));

[Java] ¿Qué imprime este código?
Set<Character> letras = new TreeSet<>();
for (char c : "banana".toCharArray()) {
    letras.add(c);
}
System.out.println(letras);

[Java] Has sobrescrito equals en tu clase Producto, pero no hashCode. ¿Qué puede pasar al meter productos en un HashSet?

[Java] Quieres un diccionario de palabras que, al imprimirlo, muestre las claves en orden alfabético. ¿Qué implementación eliges?

Lambdas y streams

¿Te atascas? Repasa la lección Lambdas y streams.

[Java] ¿Qué imprime este código?
List<Integer> nums = List.of(3, 8, 5, 12, 7, 10);
List<Integer> r = nums.stream()
        .filter(n -> n > 5)
        .map(n -> n * 2)
        .sorted()
        .limit(2)
        .toList();
System.out.println(r);

[Java] ¿Qué interfaz funcional representa una función que recibe un valor y devuelve true o false?

[Java] ¿Qué imprime este código?
List<String> nombres = List.of("Ana", "Bruno", "Eva", "Carla");
long c = nombres.stream().filter(n -> n.length() == 3).count();
String j = nombres.stream()
        .filter(n -> n.length() > 3)
        .collect(Collectors.joining("-"));
System.out.println(c + " " + j);

[Java] ¿Por qué max(Comparator) devuelve un Optional en lugar del objeto directamente?

Fechas

¿Te atascas? Repasa la lección Fechas.

[Java] ¿Qué imprime este código?
LocalDate entrega = LocalDate.of(2025, 5, 30);
entrega.plusDays(3);
System.out.println(entrega);

[Java] ¿Qué imprime este código?
LocalDate f = LocalDate.of(2025, 12, 30).plusDays(5);
System.out.println(f.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));

[Java] ¿Qué imprime este código?
LocalDate a = LocalDate.of(2025, 1, 10);
LocalDate b = LocalDate.of(2025, 3, 15);
Period p = Period.between(a, b);
long d = ChronoUnit.DAYS.between(a, b);
System.out.println(p.getDays() + " " + d);

[Java] ¿Por qué falla LocalTime.of(9, 5).format(DateTimeFormatter.ofPattern("HH:MM"))?

Ficheros

¿Te atascas? Repasa la lección Ficheros.

[Java] ¿Qué imprime este código?
Path ruta = Path.of("notas.txt");
Files.writeString(ruta, "Lunes\n");
Files.writeString(ruta, "Martes\n");
Files.writeString(ruta, "Jueves\n", StandardOpenOption.APPEND);
System.out.println(Files.readAllLines(ruta));

[Java] Este main no compila. ¿Por qué?
public static void main(String[] args) {
    List<String> lineas = Files.readAllLines(Path.of("tareas.txt"));
    System.out.println(lineas.size());
}

[Java] Un programa en Windows intenta leer el fichero "datos\tareas.txt" y dice que no existe, aunque está ahí. ¿Cuál es la causa más probable?
Path ruta = Path.of("datos\tareas.txt");

[Java] Al leer este CSV con el código siguiente, ¿qué ocurre?
// alumnos.csv:
// nombre;nota
// Lucía;8.5
List<String> lineas = Files.readAllLines(Path.of("alumnos.csv"));
for (String linea : lineas) {
    String[] campos = linea.split(";");
    System.out.println(Double.parseDouble(campos[1]));
}

JDBC

¿Te atascas? Repasa la lección JDBC.

[Java] Con este código, ¿qué texto escrito por el usuario haría que se mostraran TODOS los clientes?
String sql = "SELECT nombre FROM clientes WHERE ciudad = '" + ciudad + "'";
ResultSet filas = sentencia.executeQuery(sql);

[Java] ¿Qué error tiene este código?
String sql = "SELECT nombre FROM clientes WHERE ciudad = ?";
try (PreparedStatement sentencia = conexion.prepareStatement(sql)) {
    sentencia.setString(0, "Santander");
    ResultSet filas = sentencia.executeQuery();
    // ...
}

[Java] Con las tablas del curso (Pablo Díaz y Eva Martín viven en Madrid), ¿qué imprime este código?
String sql = "UPDATE clientes SET ciudad = ? WHERE ciudad = ?";
try (PreparedStatement sentencia = conexion.prepareStatement(sql)) {
    sentencia.setString(1, "Getafe");
    sentencia.setString(2, "Madrid");
    System.out.println(sentencia.executeUpdate());
}

[Java] ¿Qué pasa con los cambios al salir de este bloque sin errores?
try (Connection conexion = abrirConexion()) {
    conexion.setAutoCommit(false);
    // dos executeUpdate que funcionan bien
}