Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: paulamhr en 19 de Octubre 2016, 12:14
-
Hola,
es mi primer post en el foro y lo primero es agradeceros este curso, nunca me ha gustado mucho Java y lo estoy disfrutando.
La duda que tengo es esta, en el ejercicio de crear la clase Depositos y GrupoDepositos, cuando llamo a la clase Deposito dentro del constructor de GrupoDepositos, no le paso ningún parámetro al constructor de la clase Depósito, ¿por qué no usa el constructor del this y le pone valores a cero sino que usa el constructor que tiene parámetros y le pone los valores por defecto?
Este es el constructor de la clase GrupoDepositos:
//class constructor
public GrupoDepositos(int numeroDeDepositosGrupo, String valor_idGrupo)
{
idGrupo= valor_idGrupo;
switch(numeroDeDepositosGrupo)
{
case 1:
System.out.println("El grupo debe tener más de un depósito");
break;
case 2:
deposito1 = new Deposito();
deposito2 = new Deposito();
numeroDepositosGrupo = 2;
break;
case 3:
deposito1 = new Deposito();
deposito2 = new Deposito();
deposito3 = new Deposito();
numeroDepositosGrupo = 3;
break;
}
}//end of consructor
Y estos son los constructores de la clase Deposito:
//class constructor 1
public Deposito()
{
this(0,0,"");
}//end of constructor 1
//class constructor 2
public Deposito(float valor_diametro, float valor_altura, String valor_idDeposito)
{
if (valor_diametro > 0 && valor_altura > 0)
{
diametro = valor_diametro;
altura = valor_altura;
idDeposito = valor_idDeposito;
}else
{
diametro = 10;
altura = 5;
idDeposito = "000";
System.out.println("Depósito creado con valores por defecto, diámetro 10, altura 5 e identificador 000");
}
}//end of constructor 2
Gracias por vuestra ayuda.
Un saludo,
Paula
-
Buenas,
Para poder entender mejor y así poder ayudar, podría pasar los códigos de las dos clases enteros?
También recomiendo leer el siguiente enlace para aplicar correctamente los mensajes en el foro:
https://www.aprenderaprogramar.com/foros/index.php?topic=1460.msg7784#msg7784
Saludos,
nia
-
Código para clase GrupoDepositos:
public class GrupoDepositos
{
private Deposito deposito1;
private Deposito deposito2;
private Deposito deposito3;
private String idGrupo;
private int numeroDepositosGrupo;
//class constructor
public GrupoDepositos(int numeroDeDepositosGrupo, String valor_idGrupo)
{
idGrupo= valor_idGrupo;
switch(numeroDeDepositosGrupo)
{
case 1:
System.out.println("El grupo debe tener más de un depósito");
break;
case 2:
deposito1 = new Deposito();
deposito2 = new Deposito();
numeroDepositosGrupo = 2;
break;
case 3:
deposito1 = new Deposito();
deposito2 = new Deposito();
deposito3 = new Deposito();
numeroDepositosGrupo = 3;
break;
}
}//end of consructor
//methods to get the attributes of the class
public int getNumeroDepositosGrupo() { return numeroDepositosGrupo;}
public String getIdGrupo() { return idGrupo;}
public float capacidadDelGrupo()
{
if (numeroDepositosGrupo == 2 )
{
return (deposito1.valorCapacidad() + deposito2.valorCapacidad());
}else
{
return (deposito1.valorCapacidad() + deposito2.valorCapacidad() + deposito3.valorCapacidad());
}
}
}
código para la clase Depositos:
public class Deposito
{
private float diametro;
private float altura;
private String idDeposito;
//class constructor 1
public Deposito()
{
this(0,0,"");
}//end of constructor 1
//class constructor 2
public Deposito(float valor_diametro, float valor_altura, String valor_idDeposito)
{
if (valor_diametro > 0 && valor_altura > 0)
{
diametro = valor_diametro;
altura = valor_altura;
idDeposito = valor_idDeposito;
}else
{
diametro = 10;
altura = 5;
idDeposito = "000";
System.out.println("Depósito creado con valores por defecto, diámetro 10, altura 5 e identificador 000");
}
}//end of constructor 2
public void setValoresDeposito (String valor_idDeposito, float valor_diametro, float valor_altura)
{
idDeposito = valor_idDeposito;
diametro = valor_diametro;
altura = valor_altura;
if (idDeposito != "" && valor_diametro > 0 && valor_altura > 0)
{
}else
{
System.out.println("Valores no admisibles. No se han establecido valores para el deposito");
idDeposito = "";
diametro = 0;
altura = 0;
}
}
//methods to get the class attributes
public float getDiametro () { return diametro; }
public float getAltura () { return altura; }
public String getIdDeposito () { return idDeposito;}
//method to calculate capacity
public float valorCapacidad ()
{
float capacidad;
float pi = 3.1416f;
capacidad = pi*(diametro/2)*(diametro/2)*altura;
return capacidad;
}
}
-
Gracias,
A la pregunta que has realizado:
cuando llamo a la clase Deposito dentro del constructor de GrupoDepositos, no le paso ningún parámetro al constructor de la clase Depósito, ¿por qué no usa el constructor del this y le pone valores a cero sino que usa el constructor que tiene parámetros y le pone los valores por defecto?
Mi opinión es que al llamar al constructor sin parámetros de Deposito (constructor 1), éste con la línea this(0,0,"");
llama al constructor con parámetros de Deposito (constructor 2).
Dentro de el constructor 2 pasando por parámetros variables en cero no entra en el if (ya que no cumple las condiciones), así que se ejecutan las instrucciones del else poniendo las variables en valores por defecto.
Espero que responda a tu pregunta.
Un saludo,
nia
-
Gracias Nia por tu respuesta,
la verdad es que no estaba segura de si eso era lo que pasaba. Acabo de ver que Blue J te permite crear breakpoints, supongo que con eso puedo ver lo que pasa realmente en la ejecución. Lo probaré.
Un saludo,
Paula