Volver al blog

Los errores de Java más comunes en primero de DAM y DAW

Los errores de Java más comunes en primero de DAM y DAW

Corrigiendo ejercicios de primero de DAM y DAW, los mismos cinco o seis errores aparecen una y otra vez. No son fallos de torpeza: cada uno esconde un concepto que todavía no está asentado. Si reconoces la causa, dejas de perder tardes enteras.

1. NullPointerException

Es el error estrella. Significa que estás usando una variable que apunta a nada.

String nombre = null;
System.out.println(nombre.length()); // NullPointerException

Las causas habituales son un objeto que declaraste pero nunca creaste con new, un atributo que asumes inicializado, o un método que devuelve null cuando no encuentra nada.

La solución no es rodear todo de if (x != null). Es preguntarte quién tenía que dar valor a esa variable y en qué momento. Si un método puede no devolver nada, decídelo tú: devuelve una lista vacía, lanza una excepción con sentido o documenta que puede ser nulo.

2. Comparar cadenas con ==

if (respuesta == "si") { ... }   // casi siempre falso
if (respuesta.equals("si")) { ... } // correcto

En Java, == compara si son el mismo objeto en memoria, no si el texto coincide. Con literales pequeños a veces funciona por casualidad, lo que lo hace más traicionero. Usa equals y, si no distingues mayúsculas, equalsIgnoreCase.

3. ArrayIndexOutOfBoundsException

Un array de tamaño 5 tiene índices del 0 al 4. El clásico es este:

for (int i = 0; i <= notas.length; i++) { ... } // se sale por el final
for (int i = 0; i < notas.length; i++) { ... }  // correcto

Si te pasa a menudo, escribe el bucle siempre con < length y evita usar números fijos como 5 en lugar de length.

4. Confundir = con ==

Uno asigna y el otro compara. En un if el compilador te avisará si el tipo no es booleano, pero con variables boolean compila sin queja y cambia el valor en silencio, lo que produce un fallo difícil de ver.

5. No entender el paso de parámetros

En Java siempre se pasa una copia del valor. Con objetos, esa copia apunta al mismo objeto, así que puedes modificar su contenido pero no hacer que la variable de fuera apunte a otro objeto.

void cambiar(List<String> lista) {
  lista.add("hola");     // sí se ve fuera
  lista = new ArrayList<>(); // no se ve fuera
}

Este punto explica la mitad de los “pero si lo he modificado y no cambia”.

6. Dividir enteros y perder decimales

int suma = 7, total = 2;
double media = suma / total;        // 3.0, no 3.5
double correcta = (double) suma / total; // 3.5

La división entre dos enteros es entera. Convierte uno de los dos antes de dividir.

Cómo dejar de repetirlos

Lleva una lista con el error, la causa real y la línea donde apareció. No apuntes “NullPointerException”, apunta “no había creado el objeto en el constructor”. En dos o tres semanas verás que se repiten cuatro causas, no veinte errores.

Si llevas varios días con el mismo fallo y no logras aislarlo, el proceso ordenado está en cómo depurar código paso a paso, y en las clases de programación para DAM y DAW lo trabajamos directamente sobre tu proyecto.

WhatsApp