Hola, soy nuevo aquí.
Estoy haciendo un trabajo para el curso que estoy estudiando y ha llegado un punto en que no se como continuar. Le he preguntado varias veces al profesor y cada vez me dice una cosa distinta como escurriendo el bulto, asi que acudo a la comunidad, que es sabia y curtida en programación.
He aqui los ejercicios:
1. Hacer en Java la definición de una classe llamada Vehiculo. Hace falta escoger correctamente el modificador de accesibilidad y visibilidad de todos los datos y operaciones.
Atributos:
- Marca y modelo (cadena de carácteres)
- Fecha de compra (fecha)
- Matrícula (cadena de carácteres)
- Consumo, en litros por quilómetre (real)
- nombreVehiculos (entero)
Operaciones:
- Firma del constructor de la clase:
Vehiculo ( fabricante:Cadena, mod:Cadena, cad_matr:Cadena, num_matr:entero, consumo:real, fechaCompra:Fecha)
- Para cada atributo nos hará falta un método para la obtención de su valor.
- Un método que permita calcular la autonomia del vehiculo, és decir, devuelve los kilometros que se pueden hacer con una cantidad de carburante.
- Un método que devuelve los dias que hace que se compró el vehiculo.
- Un método que nos devuelve el numero total de objetos de la clase Vehiculo creados.
2. Definir por herencia la clase Coche (un Vehiculo que lleva gente).
- Los nuevos atributos son:
- Número de plazas (entero)
- Extras de confort (cadena de carácteres)
- Numero total de coches creados
Los métodos seran:
- Constructor con la firma siguiente,
Coche ( fabricante:Cadena, mod:Cadena, año:entero, cad_matr:entero, num_matr:entero, consumo:real, plazas:entero, extras:Cadena)
- Por cada nuevo atributo nos haran falta los métodos accesores correspondientes
- Un método que permita añadir un extra, a los que ya tiene el coche
- Un método que nos dice el numero total de coches creados.
Pues bien, el caso es que no se que hacer con los atributos del ejercicio 2 en negrita, ya que no se como obtener un tipo de datos que no es el que le paso. No se si me explico. Me piden año:entero, cad_matr:entero, cuando en el ejercicio anterior era fechaCompra:Fecha , cad_matr:Cadena... No se muy bien que hacer.
Esta es la situación:
SuperClase Vehiculo:
public class Vehiculo {
private String marca;
private String modelo;
private Date fecha;
private String matricula;
private double cons; // (L/km)
private int nombreVehiculos;
private static double autonomia;
private static String diasDeCompra;
private static int numeroDeVehiculos; // variable contadora de objeto vehiculo
//Operaciones
public Vehiculo(String fabricante, String mod, Date fechaCompra,
String cad_matr, double consumo, int num_matr){
marca = fabricante;
modelo = mod;
fecha = fechaCompra;
matricula = cad_matr;
cons = consumo;
nombreVehiculos = num_matr;
numeroDeVehiculos++; //incremento de la variable contadora de objeto vehiculo
}
SubClase Coche:
public class Coche extends Vehiculo {
private int numPlazas;
private String extra_confort;
private int numCoches;
private static int numeroDeCoches;
private static String extrasCoches;
private static int anyo;
public Coche(String fabricante, String mod, Date fechaCompra, String cad_matr, double consumo, int num_matr, int plazas, String extras) {
super(fabricante, mod, fechaCompra, cad_matr, consumo, num_matr);
numPlazas = plazas;
extra_confort = extras;
numeroDeCoches++;
}
EL PROBLEMA LO TENGO QUE AL USAR super NO PUEDO TOCAR EL ATRIBUTO cad_matr PARA QUE PASE A integer... O al menos no se como.
ESPERO QUE CON EL CODIGO SEA COMPRENSIBLE Y ALGUIEN SEPA AYUDARME.
Gracias de antemano!
prueba a que esos atributos sean protected, y no ¿prodrias desglosar fecha(dd/mm/aaaa(? asi creo que es mas facil
tu problema es o que el profesor es un imbécil (todo el tiempo)
o que solo fue un imbécil mientras hizo la pregunta (solo un momento).
o copiaste mal la pregunta
debido a que es difícil cometer tantos errores sutiles en tan poco tiempo me parece que es un imbécil todo el tiempo, o copiaste mal la pregunta
(no estoy molesto contigo)
bueno de todas manera te explico como se puede hacer siguiendo al pie de la letra el enunciado(tengo nausea)
import java.util.Date;
public class Vehiculo {
private String marca;
private String modelo;
private Date fecha;
private String matricula;
private double cons; // (L/km)
private int nombreVehiculos;
private static double autonomia;
private static String diasDeCompra;
private static int numeroDeVehiculos; // variable contadora de objeto
// vehiculo
// Operaciones
public Vehiculo(String fabricante, String mod, Date fechaCompra,
String cad_matr, double consumo, int num_matr) {
marca = fabricante;
modelo = mod;
fecha = fechaCompra;
matricula = cad_matr;
cons = consumo;
nombreVehiculos = num_matr;
numeroDeVehiculos++; // incremento de la variable contadora de objeto
// vehiculo
}
}
import java.util.Calendar;
import java.util.Date;
public class Coche extends Vehiculo {
private int numPlazas;
private String extra_confort;
private int numCoches;
private static int numeroDeCoches;
private static String extrasCoches;
private static int anyo;
public Coche(String fabricante, String mod, int año, int cad_matr,
double consumo, int num_matr, int plazas, String extras) {
super(fabricante, mod, createCalendar(año), "" + cad_matr, consumo,
num_matr);
numPlazas = plazas;
extra_confort = extras;
numeroDeCoches++;
}
private static Date createCalendar(int año) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, año);
calendar.set(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, 1);
return calendar.getTime();
}
}
Cita de: sapito169 en 1 Noviembre 2012, 20:40 PM
tu problema es o que el profesor es un imbécil (todo el tiempo)
o que solo fue un imbécil mientras hizo la pregunta (solo un momento).
o copiaste mal la pregunta
debido a que es difícil cometer tantos errores sutiles en tan poco tiempo me parece que es un imbécil todo el tiempo, o copiaste mal la pregunta
(no estoy molesto contigo)
bueno de todas manera te explico como se puede hacer siguiendo al pie de la letra el enunciado(tengo nausea)
import java.util.Date;
public class Vehiculo {
private String marca;
private String modelo;
private Date fecha;
private String matricula;
private double cons; // (L/km)
private int nombreVehiculos;
private static double autonomia;
private static String diasDeCompra;
private static int numeroDeVehiculos; // variable contadora de objeto
// vehiculo
// Operaciones
public Vehiculo(String fabricante, String mod, Date fechaCompra,
String cad_matr, double consumo, int num_matr) {
marca = fabricante;
modelo = mod;
fecha = fechaCompra;
matricula = cad_matr;
cons = consumo;
nombreVehiculos = num_matr;
numeroDeVehiculos++; // incremento de la variable contadora de objeto
// vehiculo
}
}
import java.util.Calendar;
import java.util.Date;
public class Coche extends Vehiculo {
private int numPlazas;
private String extra_confort;
private int numCoches;
private static int numeroDeCoches;
private static String extrasCoches;
private static int anyo;
public Coche(String fabricante, String mod, int año, int cad_matr,
double consumo, int num_matr, int plazas, String extras) {
super(fabricante, mod, createCalendar(año), "" + cad_matr, consumo,
num_matr);
numPlazas = plazas;
extra_confort = extras;
numeroDeCoches++;
}
private static Date createCalendar(int año) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, año);
calendar.set(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, 1);
return calendar.getTime();
}
}
Gracias por contestar. Creo que me has metido en la senda correcta y te lo agradezco de veras, pero ahora me surge un pequeño problema:
Tenía el siguiente objeto definido:
Coche c1 = new Coche("Seat", "Ibiza", new Date(), "7390JDT", 66.30, 250, 5, "");Entonces, se me queja en el campo de la fecha, porque es de tipo Date, y el que hemos establecido en el constructor de la clase Coche era tipo Int. Alguna sugerencia? La idea seria que utilizara solo el año de la fecha y lo pasara a entero supongo.. pero que yo sepa no existe conversiones de tipo Fecha a otro tipo.
Lo siento, mi nivel teórico no da para mucho más, y el práctico aún menos.. Este sistema educativo es un desastre, pretende enseñar Java en tiempo récord.
la forma "correcta"
Coche c1 = new Coche("Seat", "Ibiza",1988, "7390JDT", 66.30, 250, 5, "");
mira el constructor de coche
public Coche(String fabricante, String mod, int año, int cad_matr,
double consumo, int num_matr, int plazas, String extras)
el tercer parametro es un int para representar el año
yo lo hice de esa manera para cumplir con el enunciado pero no estoy de-acuerdo con eso, es mas no me gusta para nada
Vale, pues ya esta, asunto resuelto. Muchas gracias por todo crack!