Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Reutilizar constructores

Estas en el tema de Reutilizar constructores en el foro de Java en Foros del Web. Muy buenas a todos. Tengo una duda. Me piden que construya los siguientes constructores: 1º) Con todos los argumentos (Capacidad, Contenido, Material) 2º) Pasando como ...
  #1 (permalink)  
Antiguo 17/04/2013, 03:29
Avatar de dafnemartinezs  
Fecha de Ingreso: febrero-2013
Ubicación: Murcia
Mensajes: 23
Antigüedad: 11 años, 2 meses
Puntos: 1
Pregunta Reutilizar constructores

Muy buenas a todos. Tengo una duda. Me piden que construya los siguientes constructores:

1º) Con todos los argumentos (Capacidad, Contenido, Material)
2º) Pasando como argumento solamente la capacidad: reutiliza el constructor anterior, pero deja la botella vacia, de PLÁSTICO
3º)Pasando como argumento solamente la capacidad, creará una botella llena de plástico.

El problema es que no se como reutilizar el argumento 1 para hacer el 2 y como hacer el 3 ya que lleva el mismo argumento que el 2.

Si alguien me puede guiar un poco lo agradecería mucho.

Un saludo y gracias por adelantado.
  #2 (permalink)  
Antiguo 17/04/2013, 03:43
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Reutilizar constructores

Creas el constructor con 3 parámetros (por favor usa minusculas en los nombres de los atributos)
Creas el segundo constructor enviando como parámetro la capacidad y llamas al primer constructor utilizando estos 3 parámetros: capacidad, "vacia", "plastico".
Aqui viene lo raro, no puedes crear 2 constructores que usen el mismo tipo de argumentos, así que en todo caso 2 y 3 no deberían ser constructores, sino metodos propios de esa clase.

// Algo asi para el metodo 2
creaBotellaVaciaDePlastico(String capacidad) {
this = new Botella(capacidad,"vacia","plastico");
}

// Algo asi para el metodo 3
creaBotellaLlenaDePlastico(String capacidad) {
this = new Botella(capacidad,"llena","plastico");
}
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 17/04/2013, 03:46
Avatar de dafnemartinezs  
Fecha de Ingreso: febrero-2013
Ubicación: Murcia
Mensajes: 23
Antigüedad: 11 años, 2 meses
Puntos: 1
Respuesta: Reutilizar constructores

¿Y no hay manera de que los 3 sean constructores? Más que nada porque es lo que pide el profesor y no conviene llevarle la contraria
  #4 (permalink)  
Antiguo 17/04/2013, 04:52
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Reutilizar constructores

Estrictamente hablando lo que se conoce como constructor es imposible, de hecho, aunque sean constructores con parámetros distintos (uno con capacidad y otro con contenido) si capacidad y contenido son el mismo tipo de dato, tampoco te dejaría.

A menos que tengas dos capacidades, una con un tipo de dato X (String) y otra con un tipo de dato Y (Double), y crees un constructor especifico para cada una. Pero entonces el Constructor completo ya no lo sería.

Y no es que no convenga llevar la contraria, es que convendría hacerle razonar esto y que vuelva a especificar correctamente el ejercicio antes de la entrega.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #5 (permalink)  
Antiguo 17/04/2013, 05:17
Avatar de dafnemartinezs  
Fecha de Ingreso: febrero-2013
Ubicación: Murcia
Mensajes: 23
Antigüedad: 11 años, 2 meses
Puntos: 1
Respuesta: Reutilizar constructores

Puse lo que me indicaste pero me da un error de que no es aplicable.
Copio el enunciado del ejercicio por si ayuda a enterderlo:

Crear un objeto "Botella", con las siguientes características:
propiedades (acceso privado):
Float Capacidad (se mide en litros). Representa la capacidad máxima en litros que cabe en la botella.
Float Contenido (se mide en litros): Representa el contenido actual de la botella, que estará entre 0 y Capacidad.
Material (PLÁSTICO, VIDRIO, METAL) de tipo Enumeración (enum)

métodos (acceso público):
rellenar(): rellena completamente la botella a su capacidad inicial, sin importar su contenido actual.
rellenar(litros): aumenta el contenido en los litros indicados, pero lanza una excepción si se intenta exceder la capacidad.
vaciar(): vacia completamente la botella a cero litros, sin importar su contenido actual.
vaciar(litros): vacia el contenido en los litros indicados, pero lanza una excepción si intenta vaciar más que marca el Contenido real.
contenido(): nos dice el contenido actual de la botella.

constructores:
Con todos los argumentos (Capacidad, Contenido, Material)
Pasando como argumento solamente la capacidad: reutiliza el constructor anterior, pero deja la botella vacia, de PLÁSTICO
Pasando como argumento solamente la capacidad, creará una botella llena de plástico.


Disculpa mi ignorancia pero me me cuesta un poco esto de programar
Gracias de nuevo!
  #6 (permalink)  
Antiguo 17/04/2013, 05:26
Avatar de dafnemartinezs  
Fecha de Ingreso: febrero-2013
Ubicación: Murcia
Mensajes: 23
Antigüedad: 11 años, 2 meses
Puntos: 1
Respuesta: Reutilizar constructores

Lo que llevo hasta ahora es esto:


Código:
public class Botella {
/*PROPIEDADES (acceso privado):  */
    private float capacidad, contenido;
    private String material;

/*GETTER's & SETTER's*/    
    public float getCapacidad() {
        return capacidad;
    }

    public void setCapacidad(float capacidad) {
        this.capacidad = capacidad;
    }

    public float getContenido() {
        return contenido;
    }

    public void setContenido(float contenido) {
        this.contenido = contenido;
    }

    public String getMaterial() {
        return material;
    }

    public void setMaterial(String material) {
        this.material = material;
    }
    
    
    
    
/* METODOS (acceso público):*/
    public void rellenar(){
        while(contenido<capacidad){
            contenido++;
        }
    }
    
    
    public void rellenar( float litros) throws Exception{
        contenido+=litros;
        if(litros>capacidad){
            throw new Exception("Se supera la capacidad");
        }
    }
    
    
    public void vaciar(){
        contenido=0;
    }
    
    
    public void vaciar( float litros) throws Exception{
        contenido-=litros;
        if(litros>contenido){
            throw new Exception("Superado el contenido real");
            
        }
    }
    
    
    public void contenido(){
        System.out.println("El contenido actual de la botella es " + contenido + " litros");
    }
    
    
   
    
  /* CONSTRUCTORES: */

    public Botella(float capacidad, float contenido, String material) {
        this.capacidad = capacidad;
        this.contenido = contenido;
        this.material = material;
    }
    
    public Botella(float capacidad){
        this.capacidad=capacidad;
        this.contenido=0;
        this.material="Plastico";
    }

Me faltaría el tercer constructor ya que puse lo q me dijiste pero me da error de que no es aplicable.
  #7 (permalink)  
Antiguo 17/04/2013, 05:26
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Reutilizar constructores

Bueno, viéndolo así, los constructores lo más que se le parecerían sería esto:

Creas el constructor y lo reutilizas para tener el segundo dentro:
public Botella(Float capacidad, Float contenido, enum material) {
if (contenido == null && material == null) {
this.contenido = Float.valueOf("0.0f");
this.material = "PLASTICO"; // Tendrás que adaptarlo para sacarlo del enum
} else {
this.capacidad = capacidad;
this.contenido = contenido;
this.material = material;
}
}

Creas el ultimo constructor con un solo parametro:
public Botella(Float capacidad) {
this.capacidad = capacidad;
this.contenido = contenido;
this.material = "PLASTICO"; // Tendrás que adaptarlo para sacarlo del enum
}
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #8 (permalink)  
Antiguo 26/04/2013, 09:23
Avatar de dafnemartinezs  
Fecha de Ingreso: febrero-2013
Ubicación: Murcia
Mensajes: 23
Antigüedad: 11 años, 2 meses
Puntos: 1
Respuesta: Reutilizar constructores

Olvidé comentar que ya solucione el tema! Gracias por la ayuda!

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:15.