Autor Tema: ¿Qué constructor se debe usar para crear un objeto Java si hay varios? CU00642B  (Leído 5184 veces)

Andromon

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Hola, no consigo utilizar el ejemplo que se propone porque me da un error, seguro que será cualquier detalle, pero no caigo la verdad, por si me pueden ayudar...

Código: (El error) [Seleccionar]
public TaxiCond(Taxi objetoTaxi, Persona objetoPersona) {
        vehiculoTaxi = new Taxi(objetoTaxi.getMatricula(),objetoTaxi.getDistrito(),
        objetoTaxi.getTipoMotor());
        conductorTaxi = new Persona(objetoPersona.getNombre());
    }

Dice: java.lang.String

Código: (Mi clase persona) [Seleccionar]
public class Persona {
    private String nombre;
    private String apellidos;
    private int edad;
    private boolean casado;
    private String numeroDocumentoIdentidad;

    public Persona() {
        nombre = "Desconocido";
        apellidos = "Desconocidos";
        edad = 0;
        casado = false;
        numeroDocumentoIdentidad = "Desconocido";
    }

    public void setNombre(String valorNombre){
        nombre = valorNombre;
    }

    public void setApellidos(String valorApellidos) {
        apellidos = valorApellidos;
    }

    public void setEdad(int valorEdad) {
        edad = valorEdad;
    }

    public void setCasado(boolean valorCasado) {
        casado = valorCasado;
    }

    public void setNumeroDocumentoIdentidad (String valorNumeroDocumentoIdentidad) {
        numeroDocumentoIdentidad = " Numero" + valorNumeroDocumentoIdentidad;
    }

    public String getNombre() {return nombre; }

    public String getApellidos() {return apellidos; }

    public int getEdad() {return edad; }

    public boolean getCasado() {return casado; }

    public String getNumeroDocumentoIdentidad() {return numeroDocumentoIdentidad; }

}

Código: (Mi clase taxi) [Seleccionar]
public class Taxi{
    //variables o atributos
    private String ciudad;
    private String matricula;
    private String distrito;
    private int tipoMotor;
   
    //constructor
    public Taxi() {
        ciudad = "México D.F.";
        matricula = "";
        distrito = "Desconocido";
        tipoMotor = 0;
    }
   
    public Taxi(String valorMatricula, String valorDistrito, int valorTipoMotor) {
        ciudad = "México D.F.";
        matricula = valorMatricula;
        distrito = valorDistrito;
        tipoMotor = valorTipoMotor;
    }
   
    //metodos
        //establecer matricula del Taxi
    public void setMatricula (String valorMatricula){
        matricula = valorMatricula;
    }
        //distrito del Taxi
    public void setDistrito (String valorDistrito){
        distrito = "Distrito" + valorDistrito;
    }
    public void setTipoMotor (int valorTipoMotor){
        tipoMotor = valorTipoMotor;
    }
        //obtener matricula del taxi
    public String getMatricula(){return matricula;}
    public String getDistrito(){return distrito;}
    public int getTipoMotor(){return tipoMotor;}
}

Código: (Mi clase TaxiCond) [Seleccionar]
public class TaxiCond {

    private Taxi vehiculoTaxi;
    private Persona conductorTaxi;

    public TaxiCond() {
        conductorTaxi = new Persona();
        vehiculoTaxi = new Taxi();   
    }
   
    public TaxiCond(Taxi objetoTaxi, Persona objetoPersona) {
        vehiculoTaxi = new Taxi(objetoTaxi.getMatricula(),objetoTaxi.getDistrito(),
        objetoTaxi.getTipoMotor());
        conductorTaxi = new Persona(objetoPersona.getNombre());
    }
       

    public void setMatricula(String valorMatricula) {
        vehiculoTaxi.setMatricula(valorMatricula);}

    public String getDatosTaxiCond() {
        String matricula = vehiculoTaxi.getMatricula();
        String distrito = vehiculoTaxi.getDistrito();
        int tipoMotor = vehiculoTaxi.getTipoMotor();
       
        String cadenaTipoMotor = "";

        if (tipoMotor == 0){cadenaTipoMotor = "Desconocido";}
        else if (tipoMotor == 1) {cadenaTipoMotor = "Gasolina";}
        else if (tipoMotor == 2) {cadenaTipoMotor = "Diesel";}

        String datosTaxiCond = "El objeto TaxiCond presenta estos datos. Matricula: "
        + matricula + " Distrito:" + distrito + " Tipo de motor:" + cadenaTipoMotor;

        System.out.println (datosTaxiCond);
        return datosTaxiCond;
    }
}

Gracias!
« Última modificación: 06 de Abril 2015, 23:41 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola Andromon

En esta línea
        conductorTaxi = new Persona(objetoPersona.getNombre());
quieres crear un nuevo objeto de tipo Persona usando un constructor que recibe un String como parámetro, cuando tu constructor de la clase Persona solo tiene un construcor que no recibe parámetro alguno.
Ahí está el error, Java no encuentra el constructor que tú invocas para crear el conductor del taxi.

O bien creas el constructor que necesitas o usas el que ya tienes.

Aparte del código, quiero pedirte que a la hora de poner el título a tus mensajes no pongas el texto en mayúsculas. Esta forma de escribir se toma como hablar a gritos.

Gracias.

Andromon

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Hola, primero, respecto a lo de las mayúsculas, tienes toda la razón, era consciente de ello, pero admito que fue por la rapidez de que simplemente copié el título y quedó así en mayúsculas, y lo puse directamente...

Debería para practicar hacer un pequeño programa de Java que me lo convierta.  ;D Aunque eso sabría hacerlo más bien y más rápido por ahora con JavaScript...

Entonces, el código simplemente lo arreglo añadiéndole a Persona también este constructor, ¿no?

Código: [Seleccionar]
    public Persona(String valorNombre) {
        nombre = valorNombre;
        apellidos = "Desconocidos";
        edad = 0;
        casado = false;
        numeroDocumentoIdentidad = "Desconocido";   
    }

Por aprovechar el tema, entiendo que si tuviese por ejemplo este otro constructor, en vez de ese:

Código: [Seleccionar]
    public Persona(String valorNombre, String valorApellidos) {
        nombre = valorNombre;
        apellidos = valorApellidos;
        edad = 0;
        casado = false;
        numeroDocumentoIdentidad = "Desconocido";   
    }

El objeto de tipo Persona, sólo lo puedo crear si utilizo los dos get para cada parámetro de este argumento? (o ninguno claro usando el constructor por defecto, pero digo con este):

Código: (Sería entonces) [Seleccionar]
conductorTaxi = new Persona(objetoPersona.getNombre(), objetoPersona.getApellidos());
Código: (No sería correcto) [Seleccionar]
conductorTaxi = new Persona(objetoPersona.getNombre());
Necesariamente al crear un objeto entiendo tengo que utilizar alguno de los constructores de los que disponga, y entonces, tengo que pasarle como argumentos necesariamente el mismo número de parámetros que tenga ese constructor, no?

« Última modificación: 06 de Abril 2015, 23:40 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola Andromon

Estas en lo cierto. Cuando tienes que crear un nuevo objeto basado en una clase existente, puedes usar cualquiera de los constructores que tiene la clase.
Si tienes varios constructores con distinto número de parámetros, usa el que te convenga según la ocasión.

Otra forma de decirlo.
Si en un supermercado tienes varias ofertas de ahorro. Escoge la que sea más adecuada a tu necesidad. Elige la más ventajosa para tí.

Saludos

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".