Ejercicios Prácticos de Programación en Java con Ejemplos de Código
Introducción a la Programación en Java
A continuación, se presenta una colección completa de ejercicios, algoritmos y ejemplos de clases en Java, corregidos ortográfica y gramaticalmente, optimizados y estructurados para facilitar su comprensión y aplicación práctica.
Algoritmos de Patrones y Figuras Geométricas
Pirámides y Patrones Numéricos
import java.util.Scanner;
public class PiramideDeNumeros {
public static void main(String[] args) {
Scanner lector = new Scanner(System.in);
System.out.println("Ingrese el número de filas de la pirámide:");
int fila = lector.nextInt();
int cont = 1;
for (int i = 1; i < fila; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(cont + " "); // \t para mostrarlo en diagonal
cont = cont + 1;
}
System.out.println();
}
}
public static void piramideAlReves(int n) {
for (int i = n; i > 0; i--) {
// Imprimir espacios en blanco
for (int j = 0; j < n - i; j++) {
System.out.print(" ");
}
// Imprimir asteriscos
for (int j = 0; j < i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
Patrones Alternos y Triángulos Binarios
import java.util.Scanner;
public class TrianguloBinario {
public static void main(String[] args) {
Scanner lector = new Scanner(System.in);
System.out.println("Ingrese el número de filas:");
int filas = lector.nextInt();
for (int i = 0; i < filas; i++) {
int cont = 0; // Reinicia el contador en cada fila
for (int j = 0; j <= i; j++) { // Recorre las columnas en cada fila
// Alternar entre 0 y 8 basado en la suma de los índices i y j
if (cont % 2 == 0) {
System.out.print("0 "); // Imprime '0' en las posiciones pares
} else {
System.out.print("8 "); // Imprime '8' en las posiciones impares
}
cont++; // Incrementa el contador
}
System.out.println();
}
}
}
public class TrianguloBinarioInvertidoCentrado {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Ingrese el número de filas del triángulo:");
int nfilas = scanner.nextInt();
for (int i = 0; i < nfilas; i++) {
// Imprimir espacios en blanco para centrar el triángulo
for (int j = 0; j < i; j++) {
System.out.print(" ");
}
// Imprimir el patrón binario en cada fila
for (int j = 0; j < 2 * (nfilas - i) - 1; j++) {
if (j % 2 == 0) {
System.out.print("0");
} else {
System.out.print("1");
}
}
System.out.println(); // Nueva línea después de cada fila
}
}
}
import java.util.Scanner;
public class TrianguloInvertidoNormal {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Ingrese el número de filas del triángulo:");
int n = scanner.nextInt();
for (int i = 0; i < n; i++) {
// Imprimir espacios en blanco para centrar el triángulo
for (int j = 0; j < n - i - 1; j++) {
System.out.print(" ");
}
// Imprimir el patrón binario en cada fila
for (int j = 0; j < 2 * i + 1; j++) {
if (j % 2 == 0) {
System.out.print("0");
} else {
System.out.print("1");
}
}
System.out.println();
}
}
}
Series y Figuras Especiales
- Para número PAR:
int numero = 2; // Comenzamos con el primer número par for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { System.out.print(numero + " "); numero += 2; // Incrementamos para el siguiente número par } } - Para número impar:
int numero = 1; // Comenzamos con el primer número impar for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { System.out.print(numero + " "); numero += 2; // Incrementamos para el siguiente número impar } } - Pirámide de asteriscos normal:
for (int i = 1; i <= n; i++) { // Imprimir espacios for (int j = n; j > i; j--) { System.out.print(" "); } // Imprimir asteriscos for (int j = 1; j <= (2 * i - 1); j++) { System.out.print("*"); } System.out.println(); } - Pirámide de asteriscos al revés:
for (int i = n; i > 0; i--) { // Imprimir espacios en blanco for (int j = 0; j < n - i; j++) { System.out.print(" "); } // Imprimir asteriscos for (int j = 0; j < (2 * i - 1); j++) { System.out.print("*"); } System.out.println(); } - Para caracteres:
char caracter = 'A'; // Comenzamos con el primer carácter for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { System.out.print(caracter + " "); } System.out.println(); // Nueva línea después de cada fila caracter++; // Pasamos al siguiente carácter } - Diamante Numérico:
System.out.println("Ingrese el número de filas para la parte superior del diamante:"); int n = scanner.nextInt(); // Parte superior del diamante for (int i = 1; i <= n; i++) { for (int j = n; j > i; j--) { System.out.print(" "); // Imprime espacios para centrar } for (int j = 1; j <= i; j++) { System.out.print(j); // Imprime números ascendentes } for (int j = i - 1; j > 0; j--) { System.out.print(j); // Imprime números descendentes } System.out.println(); } // Parte inferior del diamante for (int i = n - 1; i > 0; i--) { for (int j = n; j > i; j--) { System.out.print(" "); } for (int j = 1; j <= i; j++) { System.out.print(j); } for (int j = i - 1; j > 0; j--) { System.out.print(j); } System.out.println(); } - Árbol de Navidad:
// Parte superior del árbol for (int i = 1; i <= n; i++) { for (int j = n; j > i; j--) { System.out.print(" "); } for (int j = 1; j <= (2 * i - 1); j++) { System.out.print("*"); } System.out.println(); } // Tronco del árbol for (int i = 1; i <= 2; i++) { for (int j = 1; j < n; j++) { System.out.print(" "); } System.out.println("|"); } - Cuadrado Hueco:
if (n <= 0) { System.out.println("El tamaño debe ser un número entero positivo."); return; } // Imprimir la primera fila llena de asteriscos for (int i = 0; i < n; i++) { System.out.print("*"); } System.out.println(); // Imprimir las filas intermedias con bordes y el interior vacío for (int i = 1; i < n - 1; i++) { System.out.print("*"); // Borde izquierdo for (int j = 1; j < n - 1; j++) { System.out.print(" "); // Espacio vacío } System.out.println("*"); // Borde derecho } // Imprimir la última fila llena de asteriscos if (n > 1) { for (int i = 0; i < n; i++) { System.out.print("*"); } System.out.println(); }
Algoritmos Matemáticos y Series Numéricas
Progresión Geométrica, Fibonacci y Factorial
import java.util.Scanner;
public class ProgresionGeometrica {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Ingrese el número de términos (n):");
int n = scanner.nextInt();
System.out.println("Ingrese el primer término (a):");
double a = scanner.nextDouble();
System.out.println("Ingrese la razón (r):");
double r = scanner.nextDouble();
if (n <= 0) {
System.out.println("El número de términos debe ser un entero positivo.");
return;
}
System.out.println("Los primeros " + n + " términos de la progresión geométrica son:");
for (int i = 0; i < n; i++) {
double termino = a * Math.pow(r, i);
System.out.println("Término " + (i + 1) + ": " + termino);
}
}
}
public class SerieFibonacci {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Ingrese el número de términos de la serie de Fibonacci:");
int n = scanner.nextInt();
if (n <= 0) {
System.out.println("El número de términos debe ser un entero positivo.");
return;
}
System.out.println("Serie de Fibonacci hasta el término " + n + ":");
printFibonacci(n);
}
public static void printFibonacci(int n) {
int a = 0, b = 1;
System.out.print(a);
if (n > 1) {
System.out.print(", " + b);
}
for (int i = 2; i < n; i++) {
int c = a + b;
System.out.print(", " + c);
a = b;
b = c;
}
System.out.println();
}
}
import java.util.Scanner;
public class Factorial {
public static void main(String[] args) {
System.out.print("Ingrese un número entero: ");
Scanner lector = new Scanner(System.in);
int n = lector.nextInt();
int res = 1;
if (n >= 0) {
for (int i = 1; i <= n; i++) {
res = res * i;
}
System.out.println("El factorial de n es " + res);
} else {
System.out.println("¡ERROR! No es un número válido");
}
}
public static int calcularFactorial(int numero) {
int res;
if (numero == 0 || numero == 1) {
res = 1;
} else {
res = numero * calcularFactorial(numero - 1);
}
return res;
}
}
Palíndromos, Potencias y Números Primos
import java.util.Scanner;
public class Palindromo {
public static void main(String[] args) {
Scanner lector = new Scanner(System.in);
System.out.print("Ingrese un número entero: ");
int numero = lector.nextInt();
int numeroIngresado = numero;
int numeroInvertido = 0;
while (numero > 0) {
int digito = numero % 10;
numeroInvertido = numeroInvertido * 10 + digito;
numero = numero / 10;
}
if (numeroIngresado == numeroInvertido) {
System.out.println("El número es un palíndromo.");
} else {
System.out.println("El número no es un palíndromo.");
}
}
}
import java.util.Scanner;
public class InvertirCadena {
public String invertirCadena(String cad) {
int pos = cad.length() - 1;
return invertirCadena(cad, pos);
}
private String invertirCadena(String cad, int pos) {
String res;
if (pos < 0) {
res = "";
} else {
char actual = cad.charAt(pos);
res = actual + invertirCadena(cad, pos - 1);
}
return res;
}
}
public class FibonacciRecursivo {
public static int fibonacci(int n) {
int res;
if (n == 0) {
res = 0;
} else {
if (n == 1) {
res = 1;
} else {
res = fibonacci(n - 1) + fibonacci(n - 2);
}
}
return res;
}
public static void main(String args[]) {
int n = 11;
int resultado = fibonacci(n);
System.out.println("El enésimo número: " + n + " de la serie Fibonacci es = " + resultado);
}
}
public class CantidadDeDigitos {
public static int ContarDigitos(int numero) {
int res;
if (numero < 10) {
return 1;
} else {
numero = numero / 10;
res = 1 + ContarDigitos(numero);
}
return res;
}
public static void main(String args[]) {
int numero;
int res;
Scanner lector = new Scanner(System.in);
System.out.println("Ingrese un número:");
numero = lector.nextInt();
res = ContarDigitos(numero);
System.out.println("El número " + numero + " tiene " + res + " dígitos");
}
}
import java.util.Scanner;
public class Potencia {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Ingrese el valor de n: ");
int n = scanner.nextInt();
System.out.print("Ingrese el valor de x: ");
int x = scanner.nextInt();
long resultado = calcularPotencia(n, x);
System.out.println(n + " elevado a la potencia " + x + " es " + resultado);
}
public static long calcularPotencia(int n, int x) {
long resultado = 1;
for (int i = 0; i < x; i++) {
resultado *= n;
}
return resultado;
}
public static int CalcularPotenciaRecursiva(int base, int exponente) {
if (base == 0) {
return 0;
} else {
if (exponente == 0) {
return 1;
} else {
if (exponente != 1) {
return base * CalcularPotenciaRecursiva(base, exponente - 1);
} else {
return base;
}
}
}
}
}
import java.util.Scanner;
public class NumeroRectangular {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Ingrese un número entero positivo: ");
int numero = scanner.nextInt();
boolean esRectangular = esNumeroRectangular(numero);
if (esRectangular) {
System.out.println(numero + " es un número rectangular.");
} else {
System.out.println(numero + " no es un número rectangular.");
}
scanner.close();
}
public static boolean esNumeroRectangular(int numero) {
int m = 1;
while (m * (m + 1) <= numero) {
if (m * (m + 1) == numero) {
return true;
}
m++;
}
return false;
}
}
import java.util.Scanner;
public class NumeroPrimo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Ingrese un número entero positivo: ");
int numero = scanner.nextInt();
boolean esPrimo = esNumeroPrimo(numero);
if (esPrimo) {
System.out.println(numero + " es un número primo.");
} else {
System.out.println(numero + " no es un número primo.");
}
scanner.close();
}
public static boolean esNumeroPrimo(int numero) {
if (numero <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(numero); i++) {
if (numero % i == 0) {
return false;
}
}
return true;
}
}
import java.util.Scanner;
public class ContarDigitosParesImpares {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Ingrese un número entero positivo: ");
int numero = scanner.nextInt();
if (numero <= 0) {
System.out.println("El número debe ser entero positivo.");
return;
}
String numeroStr = Integer.toString(numero);
int conteoPares = 0;
int conteoImpares = 0;
for (int i = 0; i < numeroStr.length(); i++) {
char digitoxar = numeroStr.charAt(i);
int digito = Character.getNumericValue(digitoxar);
if (digito % 2 == 0) {
conteoPares++;
} else {
conteoImpares++;
}
}
System.out.println("Cantidad de dígitos pares: " + conteoPares);
System.out.println("Cantidad de dígitos impares: " + conteoImpares);
}
}
import java.util.Scanner;
public class NumeroPerfecto {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Ingrese un número entero positivo: ");
int numero = scanner.nextInt();
if (numero <= 0) {
System.out.println("El número debe ser entero positivo.");
return;
}
int sumaDivisores = 0;
for (int i = 1; i <= numero / 2; i++) {
if (numero % i == 0) {
sumaDivisores += i;
}
}
if (sumaDivisores == numero) {
System.out.println(numero + " es un número perfecto.");
} else {
System.out.println(numero + " no es un número perfecto.");
}
}
}
import java.util.Scanner;
public class RotarDigitosDerecha {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Ingrese un número entero positivo: ");
int numero = scanner.nextInt();
if (numero <= 0) {
System.out.println("El número debe ser entero positivo.");
return;
}
String numeroStr = Integer.toString(numero);
String numeroRotado = rotarDerecha(numeroStr);
int numeroRotadoInt = Integer.parseInt(numeroRotado);
System.out.println("Número rotado hacia la derecha: " + numeroRotadoInt);
}
private static String rotarDerecha(String numero) {
if (numero.length() == 1) {
return numero;
}
char ultimoDigito = numero.charAt(numero.length() - 1);
String resto = numero.substring(0, numero.length() - 1);
return ultimoDigito + resto;
}
}
import java.util.Scanner;
public class FechaAnterior {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Ingrese el día: ");
int dia = scanner.nextInt();
System.out.print("Ingrese el mes: ");
int mes = scanner.nextInt();
System.out.print("Ingrese el año: ");
int año = scanner.nextInt();
int diaAnterior = dia;
int mesAnterior = mes;
int añoAnterior = año;
boolean esBisiesto = (año % 4 == 0 && año % 100 != 0) || (año % 400 == 0);
int[] diasPorMes = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (esBisiesto) {
diasPorMes[1] = 29;
}
if (dia == 1) {
if (mes == 1) {
diaAnterior = 31;
mesAnterior = 12;
añoAnterior = año - 1;
} else if (mes == 2) {
diaAnterior = 31;
mesAnterior = 1;
} else {
mesAnterior = mes - 1;
if (mesAnterior == 0) {
mesAnterior = 12;
añoAnterior = año - 1;
}
diaAnterior = diasPorMes[mesAnterior - 1];
}
} else {
diaAnterior = dia - 1;
}
System.out.println("La fecha del día anterior es: " + diaAnterior + "/" + mesAnterior + "/" + añoAnterior);
}
}
Juegos y Estadística
import java.util.Scanner;
import java.util.Random;
public class PiedraPapelTijeras {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Random random = new Random();
String[] opciones = {"piedra", "papel", "tijeras"};
System.out.println("Elige piedra, papel o tijeras:");
String eleccionUsuario = scanner.nextLine().toLowerCase();
if (!eleccionUsuario.equals("piedra") && !eleccionUsuario.equals("papel") && !eleccionUsuario.equals("tijeras")) {
System.out.println("Elección inválida. Por favor elige piedra, papel o tijeras.");
scanner.close();
return;
}
int eleccionComputadora = random.nextInt(3);
String eleccionComputadoraStr = opciones[eleccionComputadora];
System.out.println("La computadora eligió: " + eleccionComputadoraStr);
if (eleccionUsuario.equals(eleccionComputadoraStr)) {
System.out.println("¡Es un empate!");
} else {
switch (eleccionUsuario) {
case "piedra":
if (eleccionComputadoraStr.equals("tijeras")) {
System.out.println("¡Ganaste! Piedra aplasta tijeras.");
} else {
System.out.println("Perdiste. Papel cubre piedra.");
}
break;
case "papel":
if (eleccionComputadoraStr.equals("piedra")) {
System.out.println("¡Ganaste! Papel cubre piedra.");
} else {
System.out.println("Perdiste. Tijeras cortan papel.");
}
break;
case "tijeras":
if (eleccionComputadoraStr.equals("papel")) {
System.out.println("¡Ganaste! Tijeras cortan papel.");
} else {
System.out.println("Perdiste. Piedra aplasta tijeras.");
}
break;
}
}
}
}
import java.util.Scanner;
public class EstadisticasNumeros {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int cantidad = 0;
double suma = 0;
double sumaCuadrados = 0;
double maximo = 0;
double minimo = 0;
boolean primerNumero = true;
System.out.println("Ingrese números (escriba 'fin' para terminar):");
while (scanner.hasNext()) {
if (scanner.hasNextDouble()) {
double numero = scanner.nextDouble();
if (primerNumero) {
maximo = numero;
minimo = numero;
primerNumero = false;
}
suma += numero;
sumaCuadrados += numero * numero;
if (numero > maximo) {
maximo = numero;
}
if (numero < minimo) {
minimo = numero;
}
cantidad++;
} else if (scanner.next().equalsIgnoreCase("fin")) {
break;
} else {
System.out.println("Entrada no válida. Por favor ingrese un número o 'fin' para terminar.");
}
}
scanner.close();
if (cantidad == 0) {
System.out.println("No se han ingresado números.");
} else {
double media = suma / cantidad;
double varianza = (sumaCuadrados / cantidad) - (media * media);
System.out.println("Media (Promedio): " + media);
System.out.println("Varianza: " + varianza);
System.out.println("Máximo: " + maximo);
System.out.println("Mínimo: " + minimo);
}
}
}
import java.util.Scanner;
public class EncontrarModa {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Ingrese el número de elementos en el arreglo:");
int n = scanner.nextInt();
int[] arreglo = new int[n];
System.out.println("Ingrese los elementos del arreglo:");
for (int i = 0; i < n; i++) {
arreglo[i] = scanner.nextInt();
}
int moda = encontrarModa(arreglo);
System.out.println("La moda del arreglo es: " + moda);
scanner.close();
}
public static int encontrarModa(int[] arreglo) {
int n = arreglo.length;
int moda = arreglo[0];
int maxFrecuencia = 0;
for (int i = 0; i < n; i++) {
int frecuencia = 0;
for (int j = 0; j < n; j++) {
if (arreglo[j] == arreglo[i]) {
frecuencia++;
}
}
if (frecuencia > maxFrecuencia) {
maxFrecuencia = frecuencia;
moda = arreglo[i];
}
}
return moda;
}
}
Programación Orientada a Objetos (POO)
Jerarquía de Clases: Persona, Alumno y Profesional
public class Persona3 {
private String nombre;
private int edad;
public Persona3(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
public void mostrarInfo() {
System.out.println("Nombre: " + nombre);
System.out.println("Edad: " + edad);
}
}
public class Alumno3 extends Persona3 {
private double[] calificaciones;
private double costoTotalEstudios;
public Alumno3(String nombre, int edad, double[] calificaciones) {
super(nombre, edad);
this.calificaciones = calificaciones;
this.costoTotalEstudios = calcularCostoTotalEstudios();
}
public double[] getCalificaciones() {
return calificaciones;
}
public void setCalificaciones(double[] calificaciones) {
this.calificaciones = calificaciones;
}
public double getCostoTotalEstudios() {
return costoTotalEstudios;
}
public void setCostoTotalEstudios(double costoTotalEstudios) {
this.costoTotalEstudios = costoTotalEstudios;
}
public double calcularPromedio() {
double suma = 0;
for (int i = 0; i < calificaciones.length; i++) {
suma += calificaciones[i];
}
return suma / calificaciones.length;
}
private double calcularCostoTotalEstudios() {
double[] gastosGenerales = {200, 150, 100};
double costoTotal = 0;
for (double gasto : gastosGenerales) {
costoTotal += gasto;
}
return costoTotal;
}
public void mostrarCalificaciones() {
System.out.println("Calificaciones: ");
for (int i = 0; i < calificaciones.length; i++) {
System.out.println("Nota " + (i + 1) + ": " + calificaciones[i]);
}
}
public void mostrarInformacion() {
super.mostrarInfo();
mostrarCalificaciones();
System.out.println("Costo Total de Estudios: " + costoTotalEstudios);
System.out.println("Promedio de Calificaciones: " + calcularPromedio());
}
}
public class Profesional3 extends Persona3 {
private int aniosDeExperiencia;
private double sueldo;
public Profesional3(String nombre, int edad, int aniosDeExperiencia, double sueldo) {
super(nombre, edad);
this.aniosDeExperiencia = aniosDeExperiencia;
this.sueldo = calcularSueldo();
}
public String clasificarExperiencia() {
if (aniosDeExperiencia < 2) {
return "Junior";
} else if (aniosDeExperiencia < 5) {
return "Intermedio";
} else {
return "Senior";
}
}
public double calcularSueldo() {
double sueldoJunior = 2000;
double sueldoIntermedio = 3000;
double sueldoSenior = 4000;
if (aniosDeExperiencia < 2) {
return sueldoJunior;
} else if (aniosDeExperiencia < 5) {
return sueldoIntermedio;
} else {
return sueldoSenior;
}
}
@Override
public void mostrarInfo() {
super.mostrarInfo();
System.out.println("Años de Experiencia: " + aniosDeExperiencia);
System.out.println("Categoría: " + clasificarExperiencia());
System.out.println("Sueldo: " + calcularSueldo());
}
}
public class PrincipalPersonas {
public static void main(String[] args) {
Persona3 persona = new Persona3("Carlos", 30);
System.out.println("Información de Persona:");
persona.mostrarInfo();
System.out.println();
double[] calificaciones = {85.5, 90.0, 78.0, 92.0};
Alumno3 alumno = new Alumno3("Ana", 22, calificaciones);
System.out.println("Información de Alumno:");
alumno.mostrarInformacion();
System.out.println();
Profesional3 profesional = new Profesional3("Luis", 40, 6, 0);
System.out.println("Información de Profesional:");
profesional.mostrarInfo();
}
}
Sistema de Usuarios y Autenticación
public class Usuario {
private String nombreUsuario;
private String contrasena;
private boolean estadoSesion;
public Usuario(String nombreUsuario, String contrasena) {
this.nombreUsuario = nombreUsuario;
this.contrasena = contrasena;
this.estadoSesion = false;
}
public String getNombreUsuario() {
return nombreUsuario;
}
public void setNombreUsuario(String nombreUsuario) {
this.nombreUsuario = nombreUsuario;
}
public String getContrasena() {
return contrasena;
}
public void setContrasena(String contrasena) {
this.contrasena = contrasena;
}
public boolean isEstadoSesion() {
return estadoSesion;
}
public void setEstadoSesion(boolean estadoSesion) {
this.estadoSesion = estadoSesion;
}
public void iniciarSesion(String nombreUsuario, String contrasena) {
if (this.nombreUsuario.equals(nombreUsuario) && this.contrasena.equals(contrasena)) {
estadoSesion = true;
System.out.println("La sesión ha sido iniciada.");
} else {
System.out.println("Contraseña incorrecta.");
}
}
public void cerrarSesion() {
estadoSesion = false;
System.out.println("La sesión ha sido cerrada.");
}
public void mostrarInfo() {
System.out.println("Nombre de Usuario: " + nombreUsuario);
System.out.println("Estado de Sesión: " + (estadoSesion ? "Activa" : "Inactiva"));
}
}
public class UsuarioRegular extends Usuario {
private String correoElectronico;
public UsuarioRegular(String nombreUsuario, String contrasena, String correoElectronico) {
super(nombreUsuario, contrasena);
this.correoElectronico = correoElectronico;
}
public String verificarCorreo(String correoVerificar) {
if (this.correoElectronico.equals(correoVerificar)) {
setNombreUsuario("NuevoNombreUsuario");
return "Proceso exitoso: Nombre de usuario actualizado.";
} else {
return "Correo electrónico incorrecto.";
}
}
@Override
public void mostrarInfo() {
super.mostrarInfo();
System.out.println("Correo Electrónico: " + correoElectronico);
}
}
public class Administrador extends Usuario {
private String contrasenaNueva;
private String[] historialCambiosContrasena;
private int contadorCambios;
public Administrador(String nombreUsuario, String contrasena, String contrasenaNueva) {
super(nombreUsuario, contrasena);
this.contrasenaNueva = contrasenaNueva;
this.historialCambiosContrasena = new String[10];
this.contadorCambios = 0;
}
public String cambiarContrasena(String contrasenaActual, String nuevaContrasena) {
if (this.getContrasena().equals(contrasenaActual)) {
setContrasena(nuevaContrasena);
if (contadorCambios < historialCambiosContrasena.length) {
historialCambiosContrasena[contadorCambios] = nuevaContrasena;
contadorCambios++;
} else {
System.out.println("No hay espacio para más cambios en el historial.");
}
return "Contraseña actualizada con éxito.";
} else {
return "Contraseña incorrecta.";
}
}
public void mostrarHistorialCambios() {
System.out.println("Historial de cambios de contraseña:");
for (int i = 0; i < contadorCambios; i++) {
System.out.println(historialCambiosContrasena[i]);
}
}
@Override
public void mostrarInfo() {
super.mostrarInfo();
System.out.println("Historial de Cambios de Contraseña:");
mostrarHistorialCambios();
}
}
public class PrincipalUsuarios {
public static void main(String[] args) {
Usuario usuario = new Usuario("usuario1", "contrasena123");
System.out.println("Información del Usuario:");
usuario.mostrarInfo();
usuario.iniciarSesion("usuario1", "contrasena123");
usuario.cerrarSesion();
UsuarioRegular usuarioRegular = new UsuarioRegular("usuario2", "contrasena456", "[email protected]");
System.out.println(usuarioRegular.verificarCorreo("[email protected]"));
System.out.println("Nombre de usuario después de actualización: " + usuarioRegular.getNombreUsuario());
Administrador administrador = new Administrador("admin", "admin123", "nuevaContrasena");
System.out.println("Información del Administrador:");
administrador.mostrarInfo();
String resultadoCambioContrasena = administrador.cambiarContrasena("admin123", "admin456");
System.out.println(resultadoCambioContrasena);
administrador.mostrarInfo();
}
}
Programas de Recompensas y Membresías
public class Miembro {
private String nombre;
private int visitasGimnasio;
public Miembro(String nombre, int visitasGimnasio) {
this.nombre = nombre;
this.visitasGimnasio = visitasGimnasio;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getVisitasGimnasio() {
return visitasGimnasio;
}
public void setVisitasGimnasio(int visitasGimnasio) {
this.visitasGimnasio = visitasGimnasio;
}
public double calcularPremio() {
return 0;
}
}
public class MiembroBasico extends Miembro {
private static final double PREMIO_BASE = 50;
public MiembroBasico(String nombre, int visitasGimnasio) {
super(nombre, visitasGimnasio);
}
@Override
public double calcularPremio() {
double premioBase = PREMIO_BASE;
int visitas = getVisitasGimnasio();
if (visitas < 10) {
return premioBase + (premioBase * 0.05);
} else if (visitas >= 10 && visitas <= 20) {
return premioBase + (premioBase * 0.10);
} else {
return premioBase + (premioBase * 0.15);
}
}
}
public class MiembroPremium extends Miembro {
private static final double PREMIO_BASE = 100;
public MiembroPremium(String nombre, int visitasGimnasio) {
super(nombre, visitasGimnasio);
}
@Override
public double calcularPremio() {
double premioBase = PREMIO_BASE;
int visitas = getVisitasGimnasio();
if (visitas < 15) {
return premioBase + (premioBase * 0.08);
} else if (visitas >= 15 && visitas <= 30) {
return premioBase + (premioBase * 0.12);
} else {
return premioBase + (premioBase * 0.20);
}
}
}
public class ProgramaRecompensas {
public static void main(String[] args) {
MiembroBasico miembroBasico1 = new MiembroBasico("Juan", 8);
MiembroBasico miembroBasico2 = new MiembroBasico("Ana", 15);
MiembroBasico miembroBasico3 = new MiembroBasico("Carlos", 25);
MiembroPremium miembroPremium1 = new MiembroPremium("Maria", 10);
MiembroPremium miembroPremium2 = new MiembroPremium("Luis", 20);
MiembroPremium miembroPremium3 = new MiembroPremium("Sofia", 35);
System.out.println("Premio Miembro Básico Juan: " + miembroBasico1.calcularPremio());
System.out.println("Premio Miembro Básico Ana: " + miembroBasico2.calcularPremio());
System.out.println("Premio Miembro Básico Carlos: " + miembroBasico3.calcularPremio());
System.out.println("Premio Miembro Premium Maria: " + miembroPremium1.calcularPremio());
System.out.println("Premio Miembro Premium Luis: " + miembroPremium2.calcularPremio());
System.out.println("Premio Miembro Premium Sofia: " + miembroPremium3.calcularPremio());
}
}
public class VisitanteRegular {
private int entradasCompradas;
public VisitanteRegular(int entradasCompradas) {
this.entradasCompradas = entradasCompradas;
}
public int getEntradasCompradas() {
return entradasCompradas;
}
public void setEntradasCompradas(int entradasCompradas) {
this.entradasCompradas = entradasCompradas;
}
public double calcularPremio() {
double premioBase = 75;
double premioAdicional = 0;
if (entradasCompradas < 5) {
premioAdicional = premioBase * 0.08;
} else if (entradasCompradas >= 5 && entradasCompradas <= 10) {
premioAdicional = premioBase * 0.12;
} else if (entradasCompradas > 10) {
premioAdicional = premioBase * 0.20;
}
return premioBase + premioAdicional;
}
}
public class VisitanteVIP {
private int entradasCompradas;
public VisitanteVIP(int entradasCompradas) {
this.entradasCompradas = entradasCompradas;
}
public int getEntradasCompradas() {
return entradasCompradas;
}
public void setEntradasCompradas(int entradasCompradas) {
this.entradasCompradas = entradasCompradas;
}
public double calcularPremio() {
double premioBase = 150;
double premioAdicional = 0;
if (entradasCompradas < 8) {
premioAdicional = premioBase * 0.10;
} else if (entradasCompradas >= 8 && entradasCompradas <= 15) {
premioAdicional = premioBase * 0.15;
} else if (entradasCompradas > 15) {
premioAdicional = premioBase * 0.25;
}
return premioBase + premioAdicional;
}
}
public class ProgramaVisitantes {
public static void main(String[] args) {
VisitanteRegular visitanteRegular1 = new VisitanteRegular(3);
VisitanteRegular visitanteRegular2 = new VisitanteRegular(7);
VisitanteRegular visitanteRegular3 = new VisitanteRegular(12);
VisitanteVIP visitanteVIP1 = new VisitanteVIP(5);
VisitanteVIP visitanteVIP2 = new VisitanteVIP(10);
VisitanteVIP visitanteVIP3 = new VisitanteVIP(20);
System.out.println("Premio Visitante Regular 1: " + visitanteRegular1.calcularPremio());
System.out.println("Premio Visitante Regular 2: " + visitanteRegular2.calcularPremio());
System.out.println("Premio Visitante Regular 3: " + visitanteRegular3.calcularPremio());
System.out.println("Premio Visitante VIP 1: " + visitanteVIP1.calcularPremio());
System.out.println("Premio Visitante VIP 2: " + visitanteVIP2.calcularPremio());
System.out.println("Premio Visitante VIP 3: " + visitanteVIP3.calcularPremio());
}
}