Hola.
Envío ejercicio CU00681B con tipos enumerados. 5 clases.
Clase con main. MatricularVehiculos
/**
* Detalles de la clase.
* @author (Toni)
* @version (0)
*/
public class MatricularVehiculos {
public static void main (String [] args) {
ListaDeVehiculos listaVehiculos = new ListaDeVehiculos();
presentacion(listaVehiculos);
Vehiculo miCoche = new Vehiculo();
EnteroIntervalos numero = new EnteroIntervalos(); // devuelve un número entero
int numElemento=0;
Mensaje mensaje = new Mensaje("");
String respuesta = "", siNo= "";
if (listaVehiculos.size() > 0) {
mensaje.muestra("La lista se ha incializado con " + listaVehiculos.size() + " vehículos.");
} else {
mensaje.muestra("La lista de vehículos está vacía.");
}
boolean continuarBucle = true;
do {
respuesta = mensaje.responde("\tPulse la opción deseada.\n\t" +
"M -> Matricular nuevo vehículo.\n\t" +
"V -> Visualizar vehículos matriculados.\n\t" +
"R -> Retirar vehículo de la lista.\n\t" +
"INTRO -> Salir/Terminar/Exit");
if (respuesta.length() == 0) {
continuarBucle = false;
} else if (respuesta.substring(0,1).toUpperCase().equals("M")) {
miCoche = new Vehiculo();
miCoche.escogerMarca();
miCoche.escribirMatricula();
siNo = mensaje.responde ("Los datos del vehículo son:\n\t" +
"Marca: " + miCoche.getMarca() + "\n\t" +
"Matrícula: " + miCoche.getMatricula() + "\n" +
"¿Desea añadir este vehículo a la lista de los matriculados? S/N",0);
if (siNo.length() == 0) {
mensaje.muestra ("No se añade el vehículo a la lista. Respuesta en blanco.");
} else if (siNo.substring(0,1).toUpperCase().equals("S")) {
listaVehiculos.add (miCoche);
mensaje.muestra ("Vehículo añadido a la lista.");
} else {
mensaje.muestra ("No se añade el vehículo a la lista.");
}
} else if (respuesta.substring(0,1).toUpperCase().equals("V")) {
listaVehiculos.muestraLista();
} else if (respuesta.substring(0,1).toUpperCase().equals("R")) {
numElemento = numero.enteroAceptado(mensaje.responde("Introduzca el número del vehículo a retirar/remover entre 1 y " +
listaVehiculos.size(),0),1,listaVehiculos.size());
if (numElemento < 1) {
mensaje.muestra ("No se ha retirado ningún vehículo.");
} else {
miCoche = listaVehiculos.remove(numElemento-1);
mensaje.muestra("Se ha eliminado el vehículo: \n" +
"Marca: " + miCoche.getMarca() + " Matrícula: " + miCoche.getMatricula());
}
} else {
mensaje.muestra ("Opción incorrecta.");
}
} while (continuarBucle);
mensaje.muestra ("\tTerminada la matriculación de vehículos.");
} // fin delmain
private static void presentacion (ListaDeVehiculos lista) {
Mensaje mensaje = new Mensaje("Esta Vd. en el departamento de matriculación de vehículos.\n" +
"Siga las intrucciones por favor.\n");
Vehiculo miCoche;
String respuesta = "", siNo = "";
siNo = mensaje.responde ("La lista de vehículos matriculados está vacía.\n" +
"¿Desea introducir algunas matrículas de forma aleatoria?. (S/N)",0);
if (siNo.length() == 0) {
mensaje.muestra ("Respuesta en blanco. La lista queda vacía.");
} else if (siNo.substring(0,1).toUpperCase().equals("S")) {
EnteroIntervalos numero = new EnteroIntervalos(); // devuelve un número entero
int numeroCochesMatriculados = numero.enteroAceptado(mensaje.responde(
"¿Cuántos coches quiere poner en la lista?. Escriba un valor entre 1 y 15:",0),1,16);
if ( numeroCochesMatriculados < 1) {
mensaje.muestra ("Valor fuera de rango. La lista queda vacía.");
} else {
lista.addVehiculosAleatorios(numeroCochesMatriculados);
mensaje.muestra ("Se ha creado lista de vehículos");
}
} else { // se pulsa cualquier tecla distinta de 'S'
mensaje.muestra ("La lista queda vacía.");
}
}
} // Fin de la clase MatricularVehiculos
Clase ListaDeVehiculos (gestiona una colección de vehículos)
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;
/**
* Gerstiona una lista de vehículos dentro de un ArrayList
* @author (Toni)
* @version (0)
*/
public class ListaDeVehiculos { // Atributos de la clase ListaDeVehiculos
private ArrayList <Vehiculo> listaVehiculos;
//Constructor para objetos de la clase ListaDeVehiculos
public ListaDeVehiculos() { // Inicializa atributos
listaVehiculos = new ArrayList <Vehiculo> ();
} // Fin del constructor ListaDeVehiculos
/**
* Añade el vehículo aportado a la lista
*/
public void add (Vehiculo miVehiculo) {
listaVehiculos.add (miVehiculo);
}
/**
* Elimina el vehículo de la posición indicada
*/
public Vehiculo remove (int posicion) {
if (posicion >= 0 && posicion < listaVehiculos.size()) {
return listaVehiculos.remove(posicion);
} else {
return null;
}
}
/**
* Devuelve el vehículo de la posición indicada
*/
public Vehiculo getVehiculoDeLaLista (int posicion) {
if (posicion <= 0 && posicion < listaVehiculos.size()) {
return listaVehiculos.get(posicion);
} else {
return null;
}
}
/**
* Devuelve el tamaño de la lista de vehículos
*/
public int size () {
return listaVehiculos.size();
}
/**
* Muestra por pantalla la lista de vehículos con su marca y matrícula
*/
public void muestraLista () {
Iterator <Vehiculo> itV = listaVehiculos.iterator();
Vehiculo tmpV = new Vehiculo();
int contador = 0;
System.out.println ("Id.\tMarca\tMatrícula");
while (itV.hasNext()) {
tmpV = itV.next();
System.out.println ((++contador) + "\t" + tmpV.getMarca() + "\t" + tmpV.getMatricula());
}
}
/**
* Añade a la lista el número de vehículos indicados de forma aleatoria.
*/
public void addVehiculosAleatorios (int cantidad) {
Vehiculo miCoche;
String matricula;
Random numAlea = new Random();
for (int i = 0; i < cantidad; i++) {
miCoche = new Vehiculo();
miCoche.escogerMarca(numAlea.nextInt(5)); // 5 marcas diferentes
matricula = "";
for (int j = 0; j < 4; j++) {
matricula = matricula + (char) (numAlea.nextInt(10) + 48); // añade cifras del 0 al 9
}
matricula = matricula + "-";
for (int j = 0; j < 3; j++) {
matricula = matricula + (char) (numAlea.nextInt(26) + 65); // añade caracteres de la A a la Z
}
miCoche.setMatricula (matricula);
add (miCoche);
}
}
} // Fin de la clase ListaDeVehiculos
Clase Vehiculo
/**
* Clase para identificar un vehículo por su marca (un tipo enumerado) y su matrícula
* @author (Toni)
* @version (0)
*/
public class Vehiculo { // Atributos de la clase Vehiculo
enum MarcaDeVehiculo {FORD,TOYOTA,SUZUKI,RENAULT,SEAT};
private String matricula;
private MarcaDeVehiculo marca;
public Vehiculo () {
matricula = "";
marca = null;
} //fin del constructor
public void setMatricula (String matricula) { this.matricula = matricula; }
public void setMarca (MarcaDeVehiculo marca) { this.marca = marca; }
public String getMatricula () { return matricula; }
public MarcaDeVehiculo getMarca () { return marca; }
/**
* Método 'escogerMarca' para escoger por teclado un tipo enumerado como valor para el atributo 'marca'
*/
public void escogerMarca () {
String msg = "Marca de vehículo establecida con éxito.";
Mensaje mensaje = new Mensaje ("Escoja la marca del vehículo pulsando el número asociado.");
String valor = mensaje.responde ("\t0 FORD. 1 TOYOTA. 2 SUZUKI. 3 RENAULT. 4 SEAT.",0);
switch (valor) {
case "0": setMarca (MarcaDeVehiculo.FORD); break;
case "1": setMarca (MarcaDeVehiculo.TOYOTA); break;
case "2": setMarca (MarcaDeVehiculo.SUZUKI); break;
case "3": setMarca (MarcaDeVehiculo.RENAULT); break;
case "4": setMarca (MarcaDeVehiculo.SEAT); break;
default: msg = "Marca de vehículo incorrecta. Inténtelo otra vez."; break;
} // fin del switch
mensaje.muestra (msg);
}
/**
* Método 'escogerMarca' sobrecargado. Recibe como parámetro el valor que se había de escoger por teclado en el otro método.
*/
public void escogerMarca (int numero) {
switch (numero) {
case 0: setMarca (MarcaDeVehiculo.FORD); break;
case 1: setMarca (MarcaDeVehiculo.TOYOTA); break;
case 2: setMarca (MarcaDeVehiculo.SUZUKI); break;
case 3: setMarca (MarcaDeVehiculo.RENAULT); break;
case 4: setMarca (MarcaDeVehiculo.SEAT); break;
default: break;
} // fin del switch
}
/**
* Pide por teclado la matrícula que se asignará al atributo 'matricula'
*/
public void escribirMatricula () {
Mensaje mensaje = new Mensaje ("Introduzca la matrícula del vehiculo:");
setMatricula (mensaje.responde ("\t",0));
mensaje.muestra ("Se ha establecido la matrícula \"" + matricula + "\" para el vehículo.");
}
} // Fin de la clase Vehiculo
Clase Mensaje (presenta mensajes y devuelve entradas de teclado)
import java.util.Scanner;
/**
* Detalles de la clase. El método presenta mensajes por pantalla... y devuelve entradas de teclado
* @author (Toni)
* @version (0)
*/
public class Mensaje { // Atributos de la clase Mensaje
private String texto;
private int valor;
/**
* Mostrará el texto con salto de línea final.
*/
public Mensaje (String frase) { //Constructor 1 parámetro para objetos de la clase Mensaje. Inicializa atributos
texto = frase;
valor = 1;
muestra (texto, valor);
}
/**
* Muestra el texto con salto de línea o no según param.
* Valores param:
* 0 = Sin salto de línea.
* 1, u otro valor = Con salto de línea.
*/
public Mensaje (String frase, int param) {
texto = frase;
valor = param;
muestra (texto, valor);
}
// Siguen los setters para los atributos de la clase Mensaje
public void setTexto (String texto) { this.texto = texto; }
public void setValor (int valor) { this.valor = valor; }
// Ahora los getters para los atributos de la clase Mensaje
public String getTexto () { return texto; }
public int getValor () { return valor; }
// Y seguidamente, procedimientos y funciones varios.
/**
* Mostrar el texto con salto de línea (sin segundo parámetro)
*/
public void muestra (String frase) {
muestra (frase, 1);
}// fin de muestra 1 parámetro
/**
* Valores param:
* 0 = Sin salto de línea.
* 1, u otro valor = Con salto de línea.
*/
public void muestra (String frase, int param) {
texto = frase;
valor = param;
if (valor == 0) { System.out.print (texto + " ");
} else { System.out.println (texto); }
}// fin de muestra 2 parámetros
/**
* Sin segundo parámetro el mensaje incluirá salto de línea. Devuelve entrada de teclado
*/
public String responde (String frase) {
return responde (frase, 1);
}// fin de responde 1 parámetro
/**
* Valores param:
* 0 = Sin salto de línea + entrada por teclado.
* 1, u otro valor = Con salto de línea + entrada por teclado.
*/
public String responde (String frase, int param) {
texto = frase;
valor = param;
muestra (texto, valor);
Scanner entradaEscaner = new Scanner(System.in);
return entradaEscaner.nextLine();
}// fin de responde 2 parámetros
} // Fin de la clase Mensaje
Clase EnteroIntervalos (devuelve un entero dentro de un intervalo)
/**
* Recibe un String, lo convierte a int entre los intervalos aportados.
* <br>Si no puede hacerlo, devuelve valor fuera del rango especificado = (valorInicial - 1)
* @author (Toni)
* @version (0)
*/
public class EnteroIntervalos {
public int enteroAceptado (String entrada, int valorInicial, int valorFinal) {
int entero = 0;
char c =' ';
entrada = entrada.trim();
if (entrada.length() == 0) { return valorInicial - 1; }
for (int i = 0; i < entrada.length(); i++) {
c = entrada.charAt(i);
if (c==48 || c==49 || c==50 || c==51 || c==52 || c==53 || c==54 || c==55 || c==56 || c==57) { // solo dígitos del 0 al 9
} else { return valorInicial - 1; } // ha aparecido un caracter no dígito
}
entero = (int)Integer.valueOf(entrada);
if (entero < valorInicial || entero >= valorFinal) { return valorInicial - 1; } // entero fuera del rango desde-hasta
return entero;
} // fin de enteroAceptado
} // Fin de la clase EnteroIntervalos
Saludos.