Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: LuisM en 02 de Agosto 2017, 01:13
-
Hola a todos !!
Paso a dejar el codigo del ejercicio propuesto en la entrega CU00681B del curso básico de programación Java. Realmente es el ejercicio que mas me costó realizar, tuve que reescribir bastante y por poco lo dejo para después de la siguiente entrega. Busqué información y me ayudó mucho usar valueOf() y toString() para escribir un código "aceptable" ;)
Desde ya muchas gracias a los cometarios y correcciones que habrá.
Saludos
Metodo main
/**
* Descripción para javadoc antes de la clase. Ejemplo para tipos enumerados
* @author Luis
*/
public class TestEnum {
public static void main (String[ ] Args) {
Vehiculo claseVehiculo = new Vehiculo();
EntradaDeTeclado entrada = new EntradaDeTeclado();
System.out.println ("Por favor introduzca una marca (FORD, TOYOTA, SUZUKI, RENAULT, SEAT) :");
entrada.pedirEntrada();
String marcaVehiculo = entrada.getEntrada();
claseVehiculo.setMarca(marcaVehiculo);
System.out.println ("Por favor introduzca una matrícula:");
entrada.pedirEntrada();
String matriculaVehiculo = entrada.getEntrada();
claseVehiculo.setMatricula(matriculaVehiculo);
System.out.println ("El vehículo ingresado es marca "+claseVehiculo.getMarca()+" y la matrícula es "+claseVehiculo.getMatricula());
} //Cierre del main
} //Cierre de la clase
Clase Vehiculo - uso de enum
/**
* Descripción para javadoc antes de la clase. Clase del ejercicio aprenderaprogramar.com para tipos enumerados
* @author Luis
*/
enum MarcaDeVehiculo {FORD, TOYOTA, SUZUKI, RENAULT, SEAT};
public class Vehiculo {
String matricula = "";
MarcaDeVehiculo marca;
public Vehiculo(String valor_matricula, String valor_marca){
setMatricula(valor_matricula);
setMarca(valor_marca);
}
public Vehiculo(){
}
public void setMatricula(String valor_matricula) {
matricula = valor_matricula;
}
public void setMarca(String valor_marca) {
marca = MarcaDeVehiculo.valueOf(valor_marca);
}
public String getMarca(){
return marca.toString();
}
public String getMatricula(){
return matricula;
}
} //Cierre de la clase
Clase usada para el ingreso de los datos, ya usada en ejercicios anteriores
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
// Definimos una clase EntradaDeTeclado aprenderaprogramar.com
public class EntradaDeTeclado {
private String entradaTeclado; //Variable de instancia (campo) de la clase
public EntradaDeTeclado () { //Constructor
entradaTeclado="";
// pedirEntrada(); //Esto es una llamada a un método interno. Al crear un objeto ejecutamos el método
} //Cierre del constructor
public void pedirEntrada () { //Método de la clase
Scanner entradaEscaner = new Scanner (System.in);
entradaTeclado = entradaEscaner.nextLine ();
} //Cierre del método pedirEntrada
public String getEntrada () { return entradaTeclado; } //Cierre del método getEntrada
public String getPrimeraPalabra () {
for (int i=0; i < entradaTeclado.length() - 1; i++) {
if (entradaTeclado.substring (i, i+1).equals(" ") ) { //IMPORTANTÍSIMO: COMPARAMOS CON EQUALS
return entradaTeclado.substring(0, i+1); }
}
return entradaTeclado; //Caso de que no se detecte ningún espacio devolvemos lo que haya
} //Cierre del método getPrimeraPalabra
public int getLongitud () { //Método de la clase
return entradaTeclado.length();
} //Cierre del método getLongitud
} //Cierre de la clase
-
Hola LuisM, en este ejercicio no es necesario usar toString(), que se explica más adelante en el curso.
Para usar el tipo enumerado, te has valido en todo momento de conversión en String. Pero eso no es lo más adecuado, o al menos no supone una buena comprensión del uso de enumerados. Revisa este ejercicio https://www.aprenderaprogramar.com/foros/index.php?topic=3140.0 y los comentarios, lo que ahí se comenta creo que te servirá para comprender mejor el uso de enumerados sin depender de String.
Una cosa básica a comprender: el método setMarca no puede recibir un String como parámetro, porque Marca no es un String. Un set siempre debe recibir el tipo del dato que va a establecer.
Saludos
-
Hola Alex !! Muchas gracias por tu corrección del ejercicio. Volví a leer la definición de enum y mi error fue confundirlo como una colección de strings cuando realmente es una colección inmodificable de objetos del tipo enum !!!!
Paso a dejar el código ya corregido en la clase Vehiculo
Saludos
Luis
Clase principal - metodo main
/**
* Descripción para javadoc antes de la clase. Ejemplo para tipos enumerados
* @author Luis
*/
public class TestEnum {
public static void main (String[ ] Args) {
Vehiculo claseVehiculo = new Vehiculo();
EntradaDeTeclado entrada = new EntradaDeTeclado();
System.out.println ("Por favor introduzca una marca (FORD, TOYOTA, SUZUKI, RENAULT, SEAT) :");
entrada.pedirEntrada();
String marcaVehiculo = entrada.getEntrada();
claseVehiculo.setMarca(marcaVehiculo);
System.out.println ("Por favor introduzca una matrícula:");
entrada.pedirEntrada();
String matriculaVehiculo = entrada.getEntrada();
claseVehiculo.setMatricula(matriculaVehiculo);
System.out.println ("El vehículo ingresado es marca "+claseVehiculo.getMarca()+" y la matrícula es "+claseVehiculo.getMatricula());
} //Cierre del main
} //Cierre de la clase
Clase Vehiculo
/**
* Descripción para javadoc antes de la clase. Clase del ejercicio aprenderaprogramar.com para tipos enumerados
* @author Luis
*/
enum MarcaDeVehiculo {FORD, TOYOTA, SUZUKI, RENAULT, SEAT};
public class Vehiculo {
String matricula = "";
MarcaDeVehiculo marca;
public Vehiculo(String valor_matricula, String valor_marca){
matricula=valor_matricula;
setMarca(valor_marca);
}
public Vehiculo(){
}
public void setMatricula(String valor_matricula) {
matricula = valor_matricula;
}
public void setMarca(String valor_marca) {
if (valor_marca.equals("FORD")) {marca = MarcaDeVehiculo.FORD;} else
if (valor_marca.equals("TOYOTA")) {marca = MarcaDeVehiculo.TOYOTA;} else
if (valor_marca.equals("SUZUKI")) {marca = MarcaDeVehiculo.SUZUKI;} else
if (valor_marca.equals("RENAULT")) {marca = MarcaDeVehiculo.RENAULT;} else
if (valor_marca.equals("SEAT")) {marca = MarcaDeVehiculo.SEAT;}
}
public MarcaDeVehiculo getMarca(){
return marca;
}
public String getMatricula(){
return matricula;
}
} //Cierre de la clase
y la clase que sirve para el ingreso de datos
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
// Definimos una clase EntradaDeTeclado aprenderaprogramar.com
public class EntradaDeTeclado {
private String entradaTeclado; //Variable de instancia (campo) de la clase
public EntradaDeTeclado () { //Constructor
entradaTeclado="";
// pedirEntrada(); //Esto es una llamada a un método interno. Al crear un objeto ejecutamos el método
} //Cierre del constructor
public void pedirEntrada () { //Método de la clase
Scanner entradaEscaner = new Scanner (System.in);
entradaTeclado = entradaEscaner.nextLine ();
} //Cierre del método pedirEntrada
public String getEntrada () { return entradaTeclado; } //Cierre del método getEntrada
public String getPrimeraPalabra () {
for (int i=0; i < entradaTeclado.length() - 1; i++) {
if (entradaTeclado.substring (i, i+1).equals(" ") ) { //IMPORTANTÍSIMO: COMPARAMOS CON EQUALS
return entradaTeclado.substring(0, i+1); }
}
return entradaTeclado; //Caso de que no se detecte ningún espacio devolvemos lo que haya
} //Cierre del método getPrimeraPalabra
public int getLongitud () { //Método de la clase
return entradaTeclado.length();
} //Cierre del método getLongitud
} //Cierre de la clase