Como siempre! los comentarios de Cesar con un valor de utilidad muy alto.
A Continuación el código del ejercicio replanteado (error de compilación corregido)
public class OfertarVehiculo
import java.util.Scanner;
import javax.swing.JOptionPane;
/**Esta clase dispone de un método main, cuyo cometido es pedir al usuario la marca de un vehículo entre 5 marcas disponibles, pedir un numero entero que representa una cantidad
*de días, el método main utiliza dichos datos suministrados por el usuario para generar una oferta de renta de vehículo, mostrando modelos de vehículos disponibles y precio
*de la renta, según la marca y la cantidad de días especificados, para realizar esta tarea, el método con el main usa métodos propios de la clase "Vehiculo" y métodos privados
y propios de esta clase "OfertarVehiculo" (Los metodos declarados como private no se visualizan en la documentación generada por el javadoc)
@author @sniperofelite
@version 1.0.18
*/
public class OfertarVehiculo
{ /**Método tipo procedimiento, método main de la clase, ejecutar este método para iniciar el programa. el programa podria arrojar los siguientes errores en ejecución:
@throws java.lang.IllegalArgumentException Si la marca indicada por el usuario no representa el String de uno de los objetos que contiene el enumerado declarado en la clase
VehiculosYDias o lo indicado por el usuario es igual a null (campo vacío)
@throws NumberFormatException Si lo escrito por el usuario en representación de los días no es un String que reprecente un numero entero o no se a escrito nada*/
public static void main(String []args)
{
Vehiculo vehiculo = new Vehiculo();
System.out.println("\t\t\t\t\t\t\t\t\tBienvenido a: Lopez Rent-a-Car\n\n\t\t\t\tSomos la empresa numero 1 en renta de vehiculos de las siguientes marcas: " +
"FORD, TOYOTA, SUZUKI, RENAULT y SEAT.\n\n\t\t\t\t\t\t\t\t Pulsa enter para consultar nuestras ofertas");
Scanner escaner = new Scanner(System.in);
String entrada = escaner.nextLine();
int volver = 0;
while(volver == 0)
{
if(entrada.equals(""))
{
System.out.println("\f\nEsperando...");
}
String marca = JOptionPane.showInputDialog(null, "Selecciona una entre las siguientes marcas", "FORD TOYOTA SUZUKI RENAULT SEAT");
String dias = JOptionPane.showInputDialog(null, "Dinos por cuantos días te gustaría realizar la renta ", "Ejemplo: 30");
vehiculo.setMarca(Vehiculo.MarcasDeVehiculos.valueOf(marca.toUpperCase()));
vehiculo.setDias((Integer.valueOf(dias)));
String vehiculoARentar = vehiculo.getMarca().toString();
long diasARentar = vehiculo.getDias();
int i = 0;
String faltaPoco = "";
while(i <= 100)
{
if(i == 70)
{
faltaPoco = "\nYa falta poco!";
}
System.out.print(" \f" + i + "% Procesado." + faltaPoco + "\nEspera un momento, estamos generando las ofertas disponibles.");
sleeping(150);
i++;
}
sleeping(800);
System.out.print("\fListo!");
sleeping(2000);
System.out.print("\fDisponemos de las siguientes ofertas para vehiculos de marca: " + vehiculoARentar + "\n");
sleeping(4000);
if(vehiculoARentar.equals("FORD"))
{
System.out.println("\nModelo: Mustang 2010. \nPrecio por dia: US 85. \nRenta por " + diasARentar + " dias = US " + (85*diasARentar) + ".");
if(diasARentar > 15){descuento(85*diasARentar,10);}else{masDe15Dias();}
sleeping(7000);
System.out.println("\nModelo: Fusion 2009. \nPrecio por dia: US 77. \nRenta por " + diasARentar + " dias = US " + (77*diasARentar) + ".");
if(diasARentar > 15){descuento(77*diasARentar,10);}else{masDe15Dias();}
}
else if(vehiculoARentar.equals("TOYOTA"))
{
System.out.println("\nModelo: Camry 2007. \nPrecio por dia: US 50. \nRenta por " + diasARentar + " dias = US " + (50*diasARentar) + ".");
if(diasARentar > 15){descuento(50*diasARentar,10);}else{masDe15Dias();}
sleeping(7000);
System.out.println("\nModelo: Corolla 2004. \nPrecio por dia: US 40. \nRenta por " + diasARentar + " dias = US " + (40*diasARentar) + ".");
if(diasARentar > 15){descuento(40*diasARentar,10);}else{masDe15Dias();}
}
else if(vehiculoARentar.equals("SUZUKI"))
{
System.out.println("\nModelo: Splash 2006. \nPrecio por dia: US 45. \nRenta por " + diasARentar + " dias = US " + (45*diasARentar) + ".");
if(diasARentar > 15){descuento(45*diasARentar,10);}else{masDe15Dias();}
sleeping(7000);
System.out.println("\nModelo: Kizashi 2008. \nPrecio por dia: US 55. \nRenta por " + diasARentar + " dias = US " + (55*diasARentar) + ".");
if(diasARentar > 15){descuento(55*diasARentar,10);}else{masDe15Dias();}
}
else if(vehiculoARentar.equals("RENAULT"))
{
System.out.println("\nModelo: Kangoo Combi 2005. \nPrecio por dia: US 40. \nRenta por " + diasARentar + " dias = US " + (40*diasARentar) + ".");
if(diasARentar > 15){descuento(40*diasARentar,10);}else{masDe15Dias();}
sleeping(7000);
System.out.println("\nModelo: Twingo 3p 2005. \nPrecio por dia: US 45. \nRenta por " + diasARentar + " dias = US " + (45*diasARentar) + ".");
if(diasARentar > 15){descuento(45*diasARentar,10);}else{masDe15Dias();}
}
else if(vehiculoARentar.equals("SEAT"))
{
System.out.println("\nModelo: Leon Cupra 2007. \nPrecio por dia: US 58. \nRenta por " + diasARentar + " dias = US " + (58*diasARentar) + ".");
if(diasARentar > 15){descuento(58*diasARentar,10);}else{masDe15Dias();}
sleeping(7000);
System.out.println("\nModelo: Toledo 2004. \nPrecio por dia: US 35. \nRenta por " + diasARentar + " dias = US " + (35*diasARentar) + ".");
if(diasARentar > 15){descuento(35*diasARentar,10);}else{masDe15Dias();}
}
sleeping(7000);
volver = JOptionPane.showConfirmDialog(null, "Te gustaria ver otra oferta?","Confirmar",0);
System.out.println("\nGracias por preferirnos\nHasta luego!");
}
}
/*Método tipo procedimiento, este método implementa el método sleep(long millis) de la clase java.lang.Thread, recibe un parámetro long y le pasa dicho long como parámetro
al método sleep(long millis) crea un espacio de tiempo en la ejecución del código que se encuentre en la siguiente(s) linea(s) debajo de la declaración de este código, el espacio
de tiempo es relativo al valor del parametro long miliSeg que recibe este método*/
private static void sleeping(long miliSeg)
{
try
{
Thread.sleep(miliSeg);
}catch(InterruptedException e){}
}
/*Método tipo procedimiento, imprime por pantalla la cadena: "10 por ciento de descuento si la renta excede los 15 días" entre comillas
*/
private static void masDe15Dias()
{
System.out.println("\"10 por ciento de descuento si la renta excede los 15 días\"");
}
/*Metodo tipo procedimiento, recibe dos parametros long, calcula el por ciento del primer parámetro con relación al segundo parámetro, luego resta el resultado al valor del primer
parámetro e imprime por pantalla la cadena: "Para esta renta se aplica un 10 por ciento de descuento por exceder los 15 días, para un total de: US + (total - resultado)"*/
private static void descuento(long total, long porCiento)
{
long resultado = (total*porCiento) /100;
System.out.println("Para esta renta se aplica un 10 por ciento de descuento por exceder los 15 dias, para un total de: US " +
(total - resultado));
}
}
public class Vehiculo
/**Esta clase dispone de un tipo enumerado que contiene 5 objetos, un campo de clase para contener un tipo primitivo long que inicial mente vale 0 y un campo de clase para contener un objeto
de los 5 que están disponibles en el tipo enumerado, este campo de clase inicialmente contiene null. También dispone de métodos necesarios para gestionar los valores de los campos
(asignar u obtener valores)
@author @SniperOfelite
@version 1.0.18
*/
public class Vehiculo
{
//Desactivar la siguiente linea a modo de prueba para poder visualizar la interfaz de la clase (reactivar para el correcto funcionamiento del programa)
public enum MarcasDeVehiculos{FORD, TOYOTA, SUZUKI, RENAULT, SEAT};/*Esta declaración hace que se genere un error al tratar de generar la documentación de clase mediante javadoc
probé declarar esta linea de código fuera del cuerpo de la clase, por arriba de la documentacion de clase y esto no corrige el error. estoy usando:
BlueJ version 3.1.1 (java version 1.8.0_05)*/
private long dias;
private MarcasDeVehiculos marca;
/**Constructor general de la clase, inicializa el campo de clase tipo primitivo long "dias" con valor 0, y el campo de clase tipo objeto MarcasDeVehiculos con valor null.
*/
public Vehiculo()
{
dias = 0;
marca = null;
}
/**Metodo de tipo procedimiento, recibe un parámetro int y agrega dicho int como valor del campo de clase "dias"
@param dias de tipo primitivo int.
*/
public void setDias(int dias)
{
this.dias = dias;
}
/**Metodo de tipo procedimiento, recibe un parametro MarcaDeVehiculo y agrega dicho objeto como valor del campo de clase "marca"
@param marca de tipo objeto MarcaDeVehiculo.
*/
public void setMarca(MarcasDeVehiculos marca)
{
this.marca = marca;
}
/**Metodo de tipo funcion, devuelve el valor tipo long actual del campo de clase "dias"
*/
public long getDias()
{
return dias;
}
/**Metodo de tipo funsion, devuelve el objeto actual del campo de clase "marca"
*/
public MarcasDeVehiculos getMarca()
{
return marca;
}
}
En cuanto a el comentario sobre desactivar y activar código, tendré presente no incluirlo en mis programas, en este caso hago una excepción y lo incluyo para que quien revise el código entienda el problema que tengo en esa parte y me ayude con una posible solución (consiente de que no es una buena practica para programas comercializables).
Saludos!