Autor Tema: DUDA constructores java  (Leído 7852 veces)

jordi

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
DUDA constructores java
« en: 07 de Diciembre 2012, 19:04 »
Me estoy mirando el curso de java y en la pagina https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=517:pasar-objetos-como-parametros-a-un-metodo-o-constructor-java-diferenciar-objeto-y-tipo-primitivo-cu00642b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188, al intentar cambiar el constructor por el que da como ejemplo:

/* Ejemplo - aprenderaprogramar.com */

    //Constructor

    public TaxiCond (Taxi objetoTaxi, Persona objetoPersona) {

         //Creamos un objeto Taxi con los mismos datos del Taxi recibido como parámetro

         vehiculoTaxi = new Taxi (objetoTaxi.getMatricula(), objetoTaxi.getDistrito(), objetoTaxi.getTipoMotor() );

         //Creamos un objeto Persona con los mismos datos de la Persona recibidos como parámetro

        conductorTaxi = new Persona (objetoPersona.getNombre() );     }

Me da un error de compilacion, no encuentro a que puede ser debido, el error dice: constructor Taxi in class Taxi cannot be applied to given types; required: no arguments; found: java.lang.String.java.lang.string.int;...

En canvio con el constructor que se decia antes si me funcionaba:
public TaxiCond () {
        vehiculoTaxi = new Taxi (); //Creamos un objeto Taxi con el constructor general de Taxi
        conductorTaxi = new Persona (); //Creamos un objeto Persona con el constructor general de Persona
    }

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:DUDA constructores java
« Respuesta #1 en: 07 de Diciembre 2012, 21:49 »
Hola Jordi, quizás está algo confuso porque en el curso se utilizan en distintas partes dos constructores y dos formas diferentes para la clase Taxi. Por un lado el primer constructor que aparece en un ejemplo es este:

//Constructor1 sin parámetros

    public Taxi () {
        ciudad = “México D.F.”;       
        matricula = "";
        distrito = "Desconocido";
        tipoMotor = 0;

    } //Cierre del constructor … el código continúa …


Por otro lado en otro ejemplo se usa este constructor en otra definición de la clase Taxi:

//Constructor 2: cuando se cree un objeto taxi se ejecutará el código que incluyamos en el constructor

    public Taxi (String valorMatricula, String valorDistrito, int valorTipoMotor) {
        ciudad = "México D.F.";
        matricula = valorMatricula;
        distrito = valorDistrito;
        tipoMotor = valorTipoMotor;
    } //Cierre del constructor


Como ves se trata de dos constructores distintos: en un caso para crear un objeto taxi no hace falta indicar nada mientras que en el constructor 2 hace falta decir, cuando creemos un objeto Taxi, cuáles son el valorMatricula, valorDistrito y valorTipoMotor.

También según el ejemplo de la clase Taxi que usemos hay unos métodos u otros.



El error que te está dando es porque estás haciendo una llamada a un constructor que no tienes definido (estás usando el otro). Sólo puedes llamar a los constructores que tienes definidos y a los métodos que tienes definidos.

La solución más rápida que veo es tener los dos constructores en la clase Taxi que uses para que no te dé error (una clase puede tener varios constructores).

Para no liarnos, te indico los códigos de las clases de partida que debes usar:

Clase Taxi:

Código: [Seleccionar]
/* Ejemplo - aprenderaprogramar.com */

//Esta clase representa un taxi. -- > Comentario general que puede incluir: cometido, autor, versión, etc…

public class Taxi { //El nombre de la clase

    String ciudad; //Ciudad de cada objeto taxi

    String matricula; //Matrícula de cada objeto taxi

    String distrito; //Distrito asignado a cada objeto taxi

    int tipoMotor; //tipo de motor asignado a cada objeto taxi. 0 = desconocido, 1 = gasolina, 2 = diesel

    //Constructor: cuando se cree un objeto taxi se ejecutará el código que incluyamos en el constructor

    public Taxi () {

        ciudad = "México D.F.";       

        matricula = "";

        distrito = "Desconocido";

        tipoMotor = 0;

    } //Cierre del constructor … el código continúa …
   
    public Taxi (String valorMatricula, String valorDistrito, int valorTipoMotor) {
        ciudad = "México D.F.";
        matricula = valorMatricula;
        distrito = valorDistrito;
        tipoMotor = valorTipoMotor;
    } //Cierre del constructor

    //Método para establecer la matrícula de un taxi

    public void setMatricula (String valorMatricula) {

        matricula = valorMatricula; //La matrícula del objeto taxi adopta el valor que contenga valorMatricula

    } //Cierre del método

    //Método para establecer el distrito de un taxi

    public void setDistrito (String valorDistrito) {

        distrito = "Distrito " + valorDistrito; //El distrito del objeto taxi adopta el valor indicado

    } //Cierre del método

    public void setTipoMotor (int valorTipoMotor) {

        tipoMotor = valorTipoMotor; //El tipoMotor del objeto taxi adopta el valor que contenga valorTipoMotor

    } //Cierre del método

    //Método para obtener la matrícula del objeto taxi

    public String getMatricula () { return matricula; } //Cierre del método

    //Método para obtener el distrito del objeto taxi

    public String getDistrito () { return distrito; } //Cierre del método

    //Método para obtener el tipo de motor del objeto taxi

    public int getTipoMotor () { return tipoMotor; } //Cierre del método

} //Cierre de la clase

Clase Persona:

Código: [Seleccionar]
/* Ejemplo - aprenderaprogramar.com */

//Ejemplo de clase con dos constructores y un método

public class Persona {

    private String nombre;

    private int edad;

    public Persona (String nombrePersona) {   //CONSTRUCTOR 1

        nombre = nombrePersona;

        edad = 0;     }

    public Persona () {   //CONSTRUCTOR2

        nombre = "";

        edad = 0;     }

    public String getNombre () { return nombre; }  //Cierre del método

} //Cierre de la clase

Clase TaxiCond:

Código: [Seleccionar]
/* Ejemplo - aprenderaprogramar.com */

//Ejemplo de clase que utiliza tipos definidos en otras clases (usa otras clases)
public class TaxiCond {

    private Taxi vehiculoTaxi;
    private Persona conductorTaxi;

//Constructor
    public TaxiCond () {
        vehiculoTaxi = new Taxi (); //Creamos un objeto Taxi con el constructor general de Taxi
        conductorTaxi = new Persona (); //Creamos un objeto Persona con el constructor general de Persona
    }

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

    //Método que devuelve la información sobre el objeto TaxiCond
    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. Matrícula: " + matricula +
            " Distrito: " + distrito + " Tipo de motor: " + cadenaTipoMotor;

        System.out.println (datosTaxiCond);
        return datosTaxiCond;
    } //Cierre del método

} //Cierre de la clase

Ahora cambiamos el constructor de la clase TaxiCond y dejamos la clase así:

Código: [Seleccionar]
/* Ejemplo - aprenderaprogramar.com */

//Ejemplo de clase que utiliza tipos definidos en otras clases (usa otras clases)
public class TaxiCond {

    private Taxi vehiculoTaxi;
    private Persona conductorTaxi;

    /* Ejemplo - aprenderaprogramar.com */

    //Constructor

    public TaxiCond (Taxi objetoTaxi, Persona objetoPersona) {

        //Creamos un objeto Taxi con los mismos datos del Taxi recibido como parámetro

        vehiculoTaxi = new Taxi (objetoTaxi.getMatricula(), objetoTaxi.getDistrito(), objetoTaxi.getTipoMotor() );

        //Creamos un objeto Persona con los mismos datos de la Persona recibidos como parámetro

        conductorTaxi = new Persona (objetoPersona.getNombre() );     }

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

    //Método que devuelve la información sobre el objeto TaxiCond
    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. Matrícula: " + matricula +
            " Distrito: " + distrito + " Tipo de motor: " + cadenaTipoMotor;

        System.out.println (datosTaxiCond);
        return datosTaxiCond;
    } //Cierre del método

} //Cierre de la clase

A partir de ahí continúa tal y como se indica en el curso (crear las instancias, etc.)
Responsable de departamento de producción aprenderaprogramar.com

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:DUDA constructores java
« Respuesta #2 en: 11 de Diciembre 2012, 09:50 »
Después de revisar lo indicado en este hilo he procedido a modificar la entrega CU00642B del curso de Java para incluir el código de la clase Taxi (tal y como ha indicado César) y evitar así confusiones. Saludos.

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:DUDA constructores java
« Respuesta #3 en: 11 de Diciembre 2012, 14:44 »
Ok Alex
Responsable de departamento de producción aprenderaprogramar.com

 

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".