Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: mary conchis en 31 de Mayo 2018, 00:21

Título: Ejercicio con objetos del curso básico de programación Java error CU00641B
Publicado por: mary conchis en 31 de Mayo 2018, 00:21
Buenas tardes, en el ejercicio pide hacer una clase saloncasa y cocinacasa para usarlas en la clase casa, cuando trato de invocar algun metodo en la clase casa de las otras me marca error dice que primero tengo que compilar las clases lo hago y aun asi me marca error.

Código: [Seleccionar]
public class Casa {

private double superficie;
private String direccion;
private SalaCasa salaCasa;
private CocinaCasa cocinaCasa;

public Casa() {
superficie = 0;
direccion = "";
salaCasa = new SalaCasa();
cocinaCasa = new Cocina Casa();
}

public void setNumeroTeles (int valorNumeroTeles){ salaCasa.setNumeroTeles(int valorNumeroTeles);}

public void setTipo (String valorTipo) {salaCasa.setTipo(String valorTipo);}

}
Título: Re:ejercicio de la entrega (CU00641B)
Publicado por: Kabuto en 31 de Mayo 2018, 11:19
El problema es que al llamar al método.setNumeroTeles de la clase salaCasa, has de pasarle directamente la variable valorNumeroTeles, sin indicarle que es un int
Esto:
Código: [Seleccionar]
public void setNumeroTeles(int valorNumeroTeles)
{
    salaCasa.setNumeroTeles(int valorNumeroTeles);
}

Ha de hacerse así:
Código: [Seleccionar]
public void setNumeroTeles(int valorNumeroTeles)
{
    salaCasa.setNumeroTeles(valorNumeroTeles);
}

Lo mismo con el otro método, no hace falta indicarle que le pasamos un String.

Los métodos, hay que indicarles el tipo de dato del argumento que va a recibir solo cuando se están declarando y/o definiendo.

Una vez declarados/definidos, ya saben qué tipo de dato van a recibir y al llamarlos en el código para que actuen, basta con indicarle el nombre de la variable u objeto que le pasamos como argumento. No es necesario indicarle también el tipo o clase.

Y si por error le pasamos un dato que no corresponde con el tipo/clase esperado, el compilador ya te avisará.
Título: Re:Ejercicio con objetos del curso básico de programación Java error CU00641B
Publicado por: angelito338 en 03 de Febrero 2019, 01:10
Buenas, estoy con este ejercicio y antes de realizar el Ejercicio de este punto (CU00641B) quería entender el código que ponen como ejemplo en el PDF. Entonces el tema es que yo tengo la clase Taxi, la clase Persona y la clase TaxiCond, que como dice el texto hace uso de las dos anteriores.
El código de TaxiCond lo copie tal cual y cuando voy mi main tengo esto:

                Taxi miTaxi = new Taxi();
      Persona conductor = new Persona();
      TaxiCond miConductor = new TaxiCond();
      
                miTaxi.setMatricula("AC 128 MNK");
      miTaxi.setDistrito("Banfield");
      miTaxi.setTipoMotor(2);

      miConductor.setMatricula(miTaxi.getMatricula());
      miConductor.getDatosTaxiCond();

Pues como se ve en esta porción de código setteo los vales (matricula, distrito y tipoMotor), sin embargo al ejecutar el main obtengo:

SALIDA POR CONSOLA:  El objeto TaxiCond presenta estos datos. Matricula: AC 128 MNK Distrito: Desconocido Tipo de motor Desconocido

Y esto es un error porque distrito debería estar como "Banfied" y Tipo de motor como "Diesel".
No entiendo porque muestra desconocido si yo estoy cambiando los valores de esos capos a través de los métodos setters.

Por mas que busco no encuentro el error, agradecería que alguien me de una mano con esto, desde ya muchas gracias!!!!
Título: Re:Ejercicio con objetos del curso básico de programación Java error CU00641B
Publicado por: Kabuto en 03 de Febrero 2019, 02:17
Hola.

El "error" es que tu seteas valores al objeto miTaxi, que es un objeto de la clase Taxi.
Pero este seteo de valores no afecta para nada al objeto miConductor, quien tiene como atributo otro objeto de la clase Taxi, que no tiene nada que ver con el objeto miTaxi que tu has creado.

Por eso, cuando invocas al método:
Código: [Seleccionar]
miConductor.getDatosTaxiCond();
Lo que te va a mostrar son los datos del objeto Taxi que hay "dentro" de miConductor, no del que tú has creado "fuera".
Y como el Taxi que hay dentro de miConductor no ha sido seteado, te sale el mensaje de "desconocido"

Se que es un poco lioso, pero resumiendo, el problema es que en realidad en tu código hay dos objetos de la clase Taxi:
- el Taxi que tú has creado y llamado miTaxi, a quién sí has seteado valores.
- el Taxi que en realidad es un atributo de la clase TaxiCond, que está dentro del objeto llamado miConductor

Recuerda como es el código de 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
    }


Ese primer atributo, llamado vehiculoTaxi, es quien solo ha recibido el seteo de valores para la matricula, nada más, y por eso te sale "desconocido" en los demas valores cuando llamas al método getDatosTaxiCond()

Has de setearle todos los valores a este objeto Taxi, pero ahora mismo no vas a poder porque la clase TaxiCond no está completa, no tiene ningún método que permita setear dichos valores a este atributo.
De hecho, es una de las tareas que el ejercicio propone llevar a cabo:
Citar
Para completar la comprensión de la relación de uso entre clases, utiliza los métodos disponibles para el objeto TaxiCond que has creado: establece distintos valores de matrícula con el método setMatricula y visualiza los datos del objeto con el método getDatosTaxiCond. Crea además nuevos métodos que te permitan establecer el distrito y el tipo de motor de los objetos TaxiCond. Te planteamos otra reflexión: al igual que hemos definido un tipo TaxiCond que tiene dos objetos como campos, podemos definir tipos que tengan cinco, diez, quince o veinte objetos como campos


Así que piensa en como modificar la clase TaxiCond para disponer de métodos que te permita setear valores al Taxi que tenemos como atributo de clase TaxiCond.

Has de conseguir algo similar a lo que te permite hacer el método setMatricula(), pero para los datos de "distrito" y "tipo de motor".

Inténtalo y si no lo consigues, pide ayuda por aquí que te la daremos encantados.

Un saludo.