Encontre una pagina para practicar en Java que tiene un ejercicio donde hay que crear una aplicación de consola para un local que alquila autos, yo me trate de complicar un poco y queria saber si lo estoy haciendo bien, porque creo que estoy repitiendo código al dope.
Tengo 3 clases:
- Renta que es la clase principal donde esta el main
- Auto es la clase donde defino los atributos y métodos generales de los autos (patente, color, etc)
- Autos donde tengo un arrayList que uso para guardar el stock y tengo los métodos para alquilar, validar si un auto ya existe en el stock, etc
Dentro del main tengo un menu con 3 opciones:
- agregar auto al stock
- eliminar auto del stock
- mostrar el stock
El código del main es así:
Código:
cuando el usuario selecciona la opción 1 (agregar un auto al stock) llamo a la función agregarAuto de la clase Renta, la misma clase donde esta el main. En esa función le pido los datos del auto al usuario, para poder crear el objeto Auto. Una vez que cree el objeto auto, llamo a la función agregarAuto de la clase Autos (donde tengo mi arraylist). el código es algo asi:public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String cntrl = "s"; boolean resultado; int opc; while(!"n".equals(cntrl)) { System.out.println("MENU DEL PROGRAMA\n"); System.out.println("1: Ingresar un auto al stock"); System.out.println("2: Eliminar un auto del stock"); System.out.println("3: Ver el listado de autos"); System.out.print("\nIngrese una opcion: "); opc = Integer.parseInt(scanner.nextLine()); switch(opc) { case 1: System.out.println("Estas en la seccion 1"); resultado = agregarAuto(); if (resultado){ System.out.println("El auto se agrego correctamente"); } else { System.out.println("El auto ya existe en el Stock"); } break; case 2: System.out.println("Estas en la seccion 2"); resultado = eliminarAuto(); if (resultado){ System.out.println("El auto se elimino correctamente"); } else { System.out.println("El auto no existe en el Stock"); } break; case 3: System.out.println("Estas en la seccion 3"); break; default: System.out.println("Estas en la seccion 1"); break; } System.out.print("\nDesea continuar ? [s/n] "); cntrl = scanner.nextLine(); } }
función agregarAuto de la clase Renta:
Código:
Ahora llamo a la función agregarAuto de la clase Autos, donde primero verifico que no exista un auto con la petente del objeto autito en el arrayList, si no existe lo agrego y si no retorno false.public static boolean agregarAuto() { Scanner scanner = new Scanner(System.in); Autos stockAutos = new Autos(); String patente; String marca; String modelo; String color; double valor; int capacidad; System.out.println("Ingrese la patente del vehiculo "); patente = scanner.nextLine(); System.out.println("\nIngrese la marca del vehiculo "); marca = scanner.nextLine(); System.out.println("\nIngrese el modelo del vehiculo "); modelo = scanner.nextLine(); System.out.println("\nIngrese el color del vehiculo "); color = scanner.nextLine(); System.out.println("\nIngrese el valor del vehiculo "); valor = scanner.nextInt(); System.out.println("\nIngrese la capacidad de pasajeros del vehiculo "); capacidad = scanner.nextInt(); Auto autito = new Auto(patente, marca, modelo, color, valor, capacidad); // Llamo a la funcion agregarAuto de la clase Autos donde tengo mi arrayList boolean resulto = stockAutos.agregarAuto(autito); return resulto; }
El código de la clase Autos es así:
Código:
La pregunta es si estoy haciendo bien las cosas, entiendo que en una aplicación real se tendría que hacer mejor, pero estoy arrancando recién. Por ejemplo, nose si esta bien crear un objeto stockAutos en la función agregarAuto de la clase Renta porque me di cuenta que si quiero eliminar un auto del stock, en la clase Renta tendría que hacer una funcion asi:public class Autos { public static ArrayList<Auto> autos = new ArrayList<>(); public boolean agregarAuto(Auto autito){ boolean errores = validarAuto(autito.getPatente()); if(!errores) { boolean add = autos.add(autito); return add; } return false; } private boolean validarAuto(String patente){ for(int i = 0; i < autos.size(); i++ ) { if (autos.get(i).getPatente() == null ? patente == null : autos.get(i).getPatente().equals(patente)) { return true; } } return false; } }
Código:
Es decir, estaría creado otra vez un objeto stockAutos por cada acción que quisiera hacer, estaría bien crear este objeto fuera de todas las funciones de la clase Renta ? así solo lo creo una vez y listo. Esta bien como me plante la división de las clases ? creo que la clase Autos esta medio al dope pero si lo hago todo dentro de la clase Renta me quedaría enorme. Me podrian ayudar ? public static boolean deleteCar(){ Scanner scanner = new Scanner(System.in); Autos stockAutos= new Autos(); String patente; System.out.println("Ingrese la patente del vehiculo que quiere eliminar "); patente = scanner.nextLine(); boolean resultado = stockAutos.borrarAuto(patente); return resultado; }