A continuación dejo mi respuesta al siguiente ejercicio correspondiente a la entrega CU00652B del tutorial de programación Java desde cero.
Código clase Deposito
/*Esta clase representa un deposito cilindrico donde se almacena aceite
*
*/
public class Deposito{
//Campos de la clase
private float diametro;
private float altura;
private String idDeposito;
//Constructor sin parametros auxiliar
public Deposito(){//Lo que hace es llamar al constructor con parametros pasandole valores vacios
this(0,0,"");
}//Cierre del constructor
//Constructor de la clase que pide parametros necesarios
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 = "";
System.out.println ("Creado deposito con valores por defecto, diametro 10 metros, altura 5 metros, id 000");
}
}
public void setValoresDeposito (String valor_idDeposito, float valor_diametro, float valor_altura){
idDeposito = "";
diametro = 0;
altura = 0;
if(idDeposito!=""&&valor_diametro>0&&valor_altura>0){
}else{
System.out.println ("Valores no admisibles. No se han establecido valores para el deposito");
/*Esto no es posible. Un constructor no es un metodo por lo tanto
* no podemos llamarlo.
*/
idDeposito = "";
diametro = 0;
altura = 0;
}
}//Cierre del metodo
public float getDiametro(){return diametro;}
public float getAltura(){return altura;}
public String getIdDeposito(){return idDeposito;}
public float valorCapacidad(){//Metodo tipo funcion
float capacidad;
float pi = 3.1416f;//Si no incluimos la f el compilador considera que 3.1416 es double
capacidad = pi* (diametro/2)*(diametro/2)*altura;
return capacidad;
}
}//Cierre de la clase
Código clase GrupoDepositos
/*Esta clase representa un conjunto de depositos formado por entre 2 y 3 depositos*/
public class GrupoDepositos{
//Campos de la clase, algunos de ellos son tipo objetos de otra clase
private Deposito deposito1;
private Deposito deposito2;
private Deposito deposito3;
private String idGrupo;
private int numeroDepositosGrupo;
//Constructor para la clase. En ella se crean objetos de otra clase
public GrupoDepositos(int numeroDeDepositosGrupo, String valor_idGrupo){
idGrupo = valor_idGrupo;
switch (numeroDeDepositosGrupo){
case 1: System.out.println ("Un grupo ha de tener mas de un deposito");break;
case 2:
deposito1 = new Deposito();/*Al crear el objeto automaticamente se llama al constructor del mismo
en este caso sin parametros. ESTO ES EJEMPLO DE SINTAXIS DE CREACION DE UN OBJETO EN ESTE CASO DENTRO DE OTRO*/
deposito2 = new Deposito();
numeroDepositosGrupo = 2;
break;
case 3: deposito1 = new Deposito(); deposito2 = new Deposito(); deposito3 = new Deposito();
numeroDepositosGrupo = 3;
break;
default: System.out.println ("No se admiten mas de tres depositos");
//Esto no evita que se cree el objeto
break;
}//Cierre del swith
}//Cierre del constructor
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());}
//Si el grupo se ha creado con un numero de depositos distinto de 2 o 3 saltara un error en tiempo de ejecucion
}//Cierre del metodo
}//Cierre de la clase
En el ejercicio nos piden razonar porque se obtiene 1178.0999 como valor de capacidad y no otro, mi respuesta es que se obtiene porque existe esta linea en la clase Deposito
capacidad = pi* (diametro/2)*(diametro/2)*altura;
return capacidad;
Lo que quiere decir que cada deposito de acuerdo al valor de los atributos tienen un diámetro de 10 y una altura de 5, de acuerdo a esa linea de codigo la capacidad es igual a 3.1416x10=31.416/2=15.708x10=157.08/2=78.54x5=392.7x3(numero de depositos) nos da 1178.1 en la calculadora, aunque supongo el resultado que nos da java es mas exacto por el aspecto de la memoria, bueno esa es mi respuesta, cualquier sugerencia es bienvenida.