public class Pot {
public String shape;
private int capacity;
public ArrayList<Flower> flowers = new ArrayList<Flower>();
public int free_space = capacity - flowers.size(); // why doesn't free_space work?
public Pot(String shape, int capacity) {
this.shape = shape;
this.capacity = capacity;
System.out.println(capacity); // test
System.out.println(flowers.size()); // test
System.out.println(free_space); //test
}
....
}
Hola, ¿por qué no puedo obtener el espacio_libre correcto? Siempre es 0. Descubrí que free_space = capacidad - flores.size() no funciona.
si nos gusta:
public static void main(String[] args) {
Pot p = new Pot("square", 8);
Flower f = new Flower(....);
.....
Flower f6 = new Flower(....);
p.insert(f);
.....
p.insert(f6);
}
Se supone que son las 8.
------------------------------------
free_space depende de otros dos parámetros, cuando se define como free_space = capacidad - flores.size() no significa que se recalculará automáticamente.
Sin embargo, esto se puede implementar con la ayuda de getter que devuelve el resultado del cálculo (no se necesita ningún campo separado):
public int getFreeSpace() {
return capacity - flowers.size();
}
También vale la pena anular el método toString para imprimir la instantánea de la clase Pot y cal.l este captador:
@Override
public String toString() {
return String.format("Pot: {shape=%s, capacity=%d, flowers count=%d, free size=%d}",
shape, capacity, flowers.size(), getFreeSpace());
}
Prueba:
Pot p = new Pot("square", 8);
System.out.println(p); // Pot: {shape=square, capacity=8, flowers count=0, free size=8}
p.insert(new Flower());
System.out.println(p); // Pot: {shape=square, capacity=8, flowers count=1, free size=7}
// etc
Sin embargo, a partir de Java 8, donde se introdujeron lambdas e interfaces funcionales, es posible reemplazar el getter de cálculo con un campo que en este caso debería ser Proveedor<Integer>:
public Supplier<Integer> freeSpace = () -> capacity - flowers.size();
Entonces este proveedor puede ser invocado como: freeSpace.get() y se recalcula el valor real.
Actualización después del comentario de @dariosicily Además, IntSupplier podría usarse con su método getAsInt:
IntSupplier freeSpace = () -> capacity - flowers.size();
System.out.println(freeSpace.getAsInt());
1
1
En lugar de Proveedor<Enentero> Creo que es posible utilizar IntSupplier con el método getAsInt.
-dariosicily
27 de marzo de 2021 a las 9:59
------------------------------------
El cálculo lo haces en la inicialización. por supuesto siempre devolverá el tamaño 0
0