Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Andromon en 04 de Abril 2015, 17:50

Título: ¿Qué constructor se debe usar para crear un objeto Java si hay varios? CU00642B
Publicado por: Andromon en 04 de Abril 2015, 17:50
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!
Título: Re:Ejemplo CU00642B.PASO DE OBJETOS COMO PARÁMETROS A UN MÉTODO O CONSTRUCTOR EN JA
Publicado por: toni_apr en 04 de Abril 2015, 22:39
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.
Título: Re:Ejemplo CU00642B.PASO DE OBJETOS COMO PARÁMETROS A UN MÉTODO O CONSTRUCTOR EN JA
Publicado por: Andromon en 05 de Abril 2015, 11:40
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?

Título: Re:Ejemplo CU00642B.PASO DE OBJETOS COMO PARÁMETROS A UN MÉTODO O CONSTRUCTOR EN JA
Publicado por: toni_apr en 05 de Abril 2015, 21:55
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