Resuelvo ejercicio de Java en NetBeans: validador de contraseñas
En este tutorial resolvemos un caso real de empresa: implementar un verificador de contraseñas para el login. Lo hacemos en NetBeans con un proyecto Maven Web Application, en Java, con lógica clara y buenas prácticas que podés reutilizar en entrevistas y en el día a día.
Requisitos del cliente (login / seguridad)
La contraseña debe cumplir cuatro reglas:
| # | Requisito |
|---|---|
| 1 | Mínimo 8 caracteres |
| 2 | Al menos una letra mayúscula |
| 3 | Al menos un número o un carácter especial (una de las dos alcanza) |
| 4 | (Implícito) El valor recibido no debe tratarse como válido si viene null o no cumple lo anterior |
Proyecto en NetBeans con Maven
- File → New Project
- Categoría Java with Maven → Web Application
- Nombre del proyecto (ejemplo:
MavenProject1) y Finish
La raíz del proyecto Maven es donde vive el código. Para ordenar ejercicios futuros, creá un paquete y dentro una clase:
- Paquete: el que uses en tu proyecto (ejemplo
com.ejercicios) - Clase:
ValidarContras(convención PascalCase en nombres de clase)
Eliminá los comentarios autogenerados de NetBeans si no los necesitás.
Método que devuelve true o false (no solo void)
El validador debe poder usarse después como bandera en otras partes del login. Por eso el método retorna boolean:
public static boolean validarContras(String contra) {
// lógica de validación
}
String contra: la contraseña (en ingléspasswordes lo habitual;contraes válido si el equipo lo usa consistente).boolean:truesi cumple todo,falsesi no.
Probar desde el main (consola)
En la clase principal (Main o similar) definís una contraseña de prueba y llamás al método:
String contra = "Suscribete2026!";
boolean resultado = ValidarContras.validarContras(contra);
System.out.println("Resultado: " + resultado);
En la práctica la contraseña no viene fija en el código: la manda el frontend o un servicio y vos la recibís como parámetro. Para aprender, el String estático en main alcanza; el concepto es el mismo: entrada → validar → true/false.
Si NetBeans marca error al llamar validarContras, usá Ctrl + Espacio para importar la clase o asegurate de que el método esté en el paquete correcto. Ctrl + S y Run para ver la salida en consola.
Paso 1: null y longitud mínima
Asumí que el cliente está equivocado hasta que se demuestre lo contrario: empezá validando lo básico.
if (contra != null && contra.length() >= 8) {
// acá seguís con mayúscula, número y especial
} else {
System.out.println("Tu contraseña es incorrecta o los datos están mal generados.");
return false;
}
contra != null: evitaNullPointerExceptionsi el front no envió valor.contra.length() >= 8: cumple el requisito de longitud.
Paso 2: convertir el String en caracteres (toCharArray)
Para revisar cada carácter necesitás recorrer la cadena. Un String no es un arreglo de letras sueltas; lo convertís con:
for (char c : contra.toCharArray()) {
// analizar cada c
}
Ejemplo: "Suscribete2026!" tiene varios caracteres; el for ejecuta una vuelta por cada uno (S, u, s, …).
Paso 3: banderas booleanas (flags)
En lugar de asumir que ya cumple mayúscula/número/especial, creá banderas en false y pasalas a true cuando encuentres al menos un carácter que cumpla:
boolean esMayuscula = false;
boolean esNumero = false;
boolean esEspecial = false;
- Con una mayúscula alcanza →
esMayuscula = true. - Igual para dígito y para especial.
Dentro del for:
if (Character.isUpperCase(c)) {
esMayuscula = true;
}
if (Character.isDigit(c)) {
esNumero = true;
}
Para carácter especial, definí un conjunto explícito (la máquina no “sabe” qué es especial para vos):
String especiales = "!@#$%^&*()_+-=[]{}|;:',.<>?/";
if (especiales.indexOf(c) >= 0) {
esEspecial = true;
}
indexOf(c) >= 0 significa: “este carácter está en la lista de especiales permitidos”.
Paso 4: validar las tres banderas y retornar
En el video se validan las tres banderas por separado. Si tu regla de negocio es “número o especial”, usá (esNumero || esEspecial) en lugar de exigir las dos. Ejemplo al estilo del ejercicio en consola:
if (esMayuscula && esNumero && esEspecial) {
System.out.println("Tu contraseña es correcta.");
return true;
} else {
System.out.println("Tu contraseña es incorrecta. Datos incorrectos.");
return false;
}
Ajustá el mensaje según tu producto; lo importante es un solo punto de retorno claro con true / false para reutilizar en el login.
Error típico: variable declarada dentro del if
Si declarás boolean contraValida = false dentro de un if y al final hacés return contraValida fuera de ese bloque, Java marca error de alcance (scope): la variable “vive” solo dentro del if.
Solución: declará contraValida al inicio del método validarContras, actualizala cuando corresponda y al final:
return contraValida;
Así el return y la bandera están en el mismo nivel del método.
Resumen del flujo
flowchart TD
A[Recibir String contra] --> B{contra != null y length >= 8?}
B -->|No| F[return false]
B -->|Sí| C[toCharArray + for cada char c]
C --> D[Actualizar banderas mayúscula / número / especial]
D --> E{Las 3 banderas en true?}
E -->|Sí| G[return true]
E -->|No| F
Qué llevarte para el próximo ejercicio
- Leer requerimientos como problema de negocio, no solo como lista de
if. - Validar null y longitud antes de recorrer caracteres.
- Usar banderas para “¿al menos uno cumple?” sin recorrer de más.
- Métodos que retornan boolean para integrar con login u otras capas.
- Cuidar el scope de variables al usar
return.
Si querés más ejercicios resueltos así (Java, lógica y buenas prácticas), el canal sigue con propuestas similares en video.