Autor Tema: Ejercicio CU00642B - Problema de compilacion java no suitable constructor found  (Leído 7470 veces)

MrClassic

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 37
    • Ver Perfil
Cordial Saludo,

Hola, no he podido realizar el ejercicio propuesto como ejemplo, la clase TaxiCond me arroja un error de comopilacion que no me permite avanzar.
El constructor de la clase Persona no tenia parametros, procedi a añadircelos pensando que podia ser la solución pero nada, ahora me arroja el mensaje de error (archivo imagen adjunta).

no suitable constructor found for Persona(java.lang.String)
constructor Persona.Persona() is not applicable; (actual and formal argument lists differ in length);  constructor Persona.Persona(java.lang.String,java.lang.String,int...


pongo codigo de las tres clases;

Por ultimo otra pregunta;  como se insertan imagenes para que salgan en el cuerpo del mensaje.

Gracias.

Persona

Código: [Seleccionar]
public class Persona{
  /*Properties*/
 
  private String nombre;
  private String apellidos;
  private int edad;
  private boolean casado;
  private String numeroDocumentoIdentidad;
 
  /*Constructor*/
 
  public Persona(){
    nombre="";
    apellidos="";
    edad=0;
    casado=false;
    numeroDocumentoIdentidad="";
    }
   
    /*Constructor2*/
    public Persona(String valorNombre, String valorApellidos, int valorEdad, boolean valorCasado, String valorNumeroDocumentoIdentidad){
        nombre = valorNombre;
        apellidos = valorApellidos;
        edad = valorEdad;
        casado = valorCasado;
        numeroDocumentoIdentidad = valorNumeroDocumentoIdentidad;
    }
   
    /*Metodos Set para establecer valores de clase*/
   
    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=valorNumeroDocumentoIdentidad;
    }
    /*Metodos Get para obtener valores de clase*/
 
    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;
    }
   

}

   Taxi

 
Código: [Seleccionar]
public class Taxi{
    /*Properties*/
    private String ciudad;
    private String matricula;
    private String distrito;
    private int tipoMotor;
   
    /*Constructor 1*/   
    public Taxi(){
        ciudad = "Buenaventura";
        matricula="";
        distrito = "";
        tipoMotor = 0;
    }
   
    /*Constructor2*/
    public Taxi(String valorMatricula, String valorDistrito, int valorTipoMotor){
        ciudad ="Buenaventura";
        matricula = valorMatricula;
        distrito = valorDistrito;
        tipoMotor = valorTipoMotor;
    }
    /*Setters*/

   /* public void setCiudad(String valorCiudad){
        ciudad = valorCiudad; */
   
    public void  setMatricula(String valorMatricula){
        matricula = valorMatricula;
    }
    public void  setDistrito(String valorDistrito){
        distrito = valorDistrito;
    }
    public void  setTipoMotor(int valorTipoMotor){
        tipoMotor = valorTipoMotor;
    }
   
    /*Getters*/
   
   /* public String getCiudad(){
        return ciudad;
    }*/
    public String getMatricula(){
        return matricula;
    }
    public String getDistrito(){
        return distrito;
    }
    public int getTipoMotor(){
        return tipoMotor;
    }
}

  TaxiCond

Código: [Seleccionar]
public class TaxiCond{
    /*Properties*/
    private Taxi vehiculoTaxi;
    private Persona conductorTaxi;

    /*Constructor*/
    public TaxiCond(Taxi objetoTaxi, Persona objetoPersona){
        vehiculoTaxi = new Taxi(objetoTaxi.getMatricula(), objetoTaxi.getDistrito(), objetoTaxi.getTipoMotor());
        conductorTaxi = new Persona(objetoPersona.getNombre());
    }
    /*Setter*/
    public void setMatricula(String valorMatricula){
        vehiculoTaxi.setMatricula(valorMatricula);
    }
    public void setNombre(String valorNombre){
        conductorTaxi.setNombre(valorNombre);
    }

   
    /*Metodo que devuelve la informacion sobre el obj 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. Matricula: " + matricula +
        " Distrito: " + distrito + " Tipo de motor: " + cadenaTipoMotor;
       
        System.out.println(datosTaxiCond);
        return datosTaxiCond;
    }









« Última modificación: 30 de Enero 2015, 09:15 por Alex Rodríguez »
Quedo en espera de sus recomendaciones y/o correcciones.

Gracias.

MrClassic

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 37
    • Ver Perfil
Cordial Saludo,


Hola creo que encontre la solución,

faltaba los demas parametros de la variable conductorTaxi en el constructor TaxiCond

" conductorTaxi = new Persona(objetoPersona.getNombre(), objetoPersona.getApellidos(), objetoPersona.getEdad(),objetoPersona.getCasado(),objetoPersona.getNumeroDocumentoIdentidad()); "

en el ejemplo solo aparecia solo aparecia "conductorTaxi = new Persona (objetoPersona.getNombre() );"
al respecto de esto, por que solo aparece un parametro en el ejemplo, si genera error. la verdad estoy apenas asimilando todo esto.

de igual manera tendre que prestar especial cuidado en adelante pues la complejidad aumenta y cualquier detalle tiende a confundir.

Quedo atento a lo de las imganes y a cualquier información adicional que sera grandemente atradecida.


Slds.
« Última modificación: 29 de Enero 2015, 04:16 por MrClassic »
Quedo en espera de sus recomendaciones y/o correcciones.

Gracias.

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola MrClassic
Citar
no suitable constructor found for Persona(java.lang.String)

Este error quiere indicarte que estás intentando crear un objeto de tipo Persona aportando un parámetro (el nombre), cuando en tu clase Persona no tienes ningún constructor con un solo parámetro de tipo String

Tu clase Persona tiene dos constructores. Uno sin parámetros y otro con 5 en un orden preciso (String, String, int, booelan y String)
Para solventar el error, has de usar uno de estos constructores o crear uno nuevo con un único parámetro de tipo String.

He visto que encontraste la solución tu mismo. Bien.
Y a partir de aquí continúas...

Respecto a como insertar imágenes en los mensajes, mira el en el siguiente enlace la entrada
¿Cómo insertar una imagen en un mensaje del foro?

https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Saludos

MrClassic

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 37
    • Ver Perfil
Cordial Saludo,

Gracias por la información, guia y consejos,

Entiendo que para cargar las imagenes debemos hacerlo por medio de la Url de la misma, no podemos hacerlo con archivos locales,

Para crear clases usando otros objetos como tipo de datos, debemos percatarnos de que sus constructores tengan igual  numero de parametros, creo que debe ser para que se tenga certeza de que constructor estamos utilizando a la hora de crear la nueva clase,

de esto me surge una pregunta,

 que pasa si creamos dos constructores identicos con o sin parametros, cual usara la instancia de dicha clase? no se generan conflictos a la hora de seleccionar que constructor se usara para la instancia que use dicha clase?
espero hacerme entender.

por otro lado adjunto el ejercicio (CU00642B)

Entrega nº42 del curso "Aprender programación Java desde cero".


SalonCasa

Código: [Seleccionar]
public class SalonCasa{
    /*Properties*/
    private int numeroDeTelevisores;
    private String tipoSalon;
   
    /*Constructor1*/
    public SalonCasa(){ 
        numeroDeTelevisores = 0;
        tipoSalon = "desconocido";
    }
    /*Constructor2*/
    public SalonCasa(int valorNumeroDeTelevisores, String valorTipoSalon){
        numeroDeTelevisores = valorNumeroDeTelevisores;
        tipoSalon = valorTipoSalon;
    }
    /*Setters*/
    public void setNumeroDeTelevisores(int valorNumeroDeTelevisores){
        numeroDeTelevisores = valorNumeroDeTelevisores;
    }
    public void setTipoSalon(String valorTipoSalon){
        tipoSalon = valorTipoSalon;
    }
    /*Getters*/
    public int getNumeroDeTelevisores(){
        return numeroDeTelevisores;
    }
    public String getTipoSalon(){
        return tipoSalon;
    }
}

SalonCocina

Código: [Seleccionar]
public class CocinaCasa{
    /*Properties*/
    private boolean esIndependiente;
    private int numeroDeFuegos;
    /*Contructor1*/
    public CocinaCasa(){
        esIndependiente = false;
        numeroDeFuegos = 0;
    }
    /*Constructor2*/
    public CocinaCasa(boolean valorEsIndependiente, int valorNumeroDeFuego){
        esIndependiente = valorEsIndependiente;
        numeroDeFuegos = valorNumeroDeFuego;
    }
    /*Setters*/
    public void setEsIndependiente(boolean valorEsIndependiente){
        esIndependiente = valorEsIndependiente;
    }
    public void setNumeroDeFuegos(int valorNumeroDeFuegos){
        numeroDeFuegos = valorNumeroDeFuegos;
    }
    /*Getters*/
    public boolean getEsIndependiente(){
        return esIndependiente;
    }
    public int getNumeroDeFuegos(){
        return numeroDeFuegos;
    }
}

Casa


Código: [Seleccionar]
public class Casa{
    /*Properties*/
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocina;
    /*Constructor1*/
    public Casa(){
        superficie = 0;
        direccion = "";
        salonCasa = new SalonCasa();
        cocina = new CocinaCasa();
    }
    /*Constructor2*/
    public Casa(double valorSuperficie, String valorDireccion, SalonCasa objetoSalon, CocinaCasa objetoCocina){
        superficie = valorSuperficie;
        direccion = valorDireccion;
        salonCasa = new SalonCasa(objetoSalon.getNumeroDeTelevisores(), objetoSalon.getTipoSalon());
        cocina = new CocinaCasa(objetoCocina.getEsIndependiente(), objetoCocina.getNumeroDeFuegos());
    }
    /*Setters*/
    public void setSuperficie(double valorSuperficie){
        superficie = valorSuperficie;
    }
    public void setDireccion(String valorDireccion){
        direccion = valorDireccion;
    }
    public void setSalon(SalonCasa valorSalon){
        salonCasa = valorSalon;
    }
    public void setCocina(CocinaCasa valorCocina){
        cocina = valorCocina;
    }
    /*Getters*/
    public double getSuperficie(){
        return superficie;
    }
    public String getDireccion(){
        return direccion;
    }
    public SalonCasa getSalon(){
        return salonCasa;
    }
    public CocinaCasa getCocina(){
        return cocina;
    }
}





Quedo en espera de sus recomendaciones y/o correcciones.

Gracias.

toni_apr

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

Citar
que pasa si creamos dos constructores identicos con o sin parametros, cual usara la instancia de dicha clase? no se generan conflictos a la hora de seleccionar que constructor se usara para la instancia que use dicha clase?

Si creas dos constructores sin parámetros, Java de marcará error al compilar. Puedes crear tantos constructores como sean necesarios, la única limitación es que sean distintos ya sea en número de parámetros como en el orden de los parámetros. Ejem.

public SalonCasa(int numTV, String tipoSalon)
public SalonCasa( String tipoSalon,int numTV)

Las dos signaturas de constructor anteriores son distintas para Java aunque tengan el mismo número de parámetros.
Uno recibe un int y un String y el otro en cambio recibe un String y un int.

En cuanto al ejercicio, esta perfecto.
Y si has hecho lo que se indica en el enunciado:

Citar
Compila el código para comprobar que no presenta errores, y crea un objeto de tipo Casa usando el constructor que recibe parámetros. Ten en cuenta que antes tendrás que haber creado los objetos de tipo SalonCasa y CocinaCasa para poder pasárselos al constructor. Comprueba que el objeto Casa se inicializa correctamente consultando el valor de sus atributos después de haber creado el objeto.

Has cumplido con el propósito de pasar objetos como parámetros de esta entrega.

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