java - 如何计算对象中的某些属性

标签 java oop object attributes floating-point

嗨,我一直在尝试对每个对象中的 float 进行计数,以便可以获得所有 float 的总和。 float 代表重量,所以我尝试执行以下操作:我将重量总和声明为 float sumOfWeight;并说sumOfWeight = ++weight;但没有成功,有什么建议吗?

  Lake   weirdLake = new Lake(15);
        weirdLake.add(new Fish(76, 6.1f));
        weirdLake.add(new Fish(32, 0.4f));
        weirdLake.add(new Fish(20, 0.9f));
        weirdLake.add(new Fish(30, 0.4f));
        weirdLake.add(new Fish(140, 7.4f));
        weirdLake.add(new Fish(15, 0.3f));
        weirdLake.add(new Fish(90, 5.9f));
        weirdLake.add(new Fish(120, 6.8f));
        weirdLake.add(new Fish(80, 4.8f));
        weirdLake.add(new Fish(42, 3.2f));
        weirdLake.add(new Fish(100, 5.6f));
        weirdLake.add(new Fish(45, 2.0f));
        weirdLake.add(new Fish(16, 0.2f));
        weirdLake.add(new Fish(30, 1.2f));
        weirdLake.add(new Fish(7, 0.1f));

这是我的鱼类:

public class Fish 
{
    // Any fish below this size must be thrown back into the lake
    public static int  THROW_BACK_SIZE = 18; 
    public static float WEGHT_LIMIT = 10;

    protected int  size;
    protected float  weight;

    public Fish(int aSize, float aWeight) 
    {
        size = aSize;
        weight = aWeight;
    }

    public boolean isDesirableTo(Fisher f) 
    {
        if(canKeep() && f.numFishCaught < f.LIMIT && weight)
        {
          return true;
        }
        else
        {
        return false;
        }
    }

    public boolean canKeep() 
    {
        if(this.size > THROW_BACK_SIZE)
        {
          return true;
        }
        else
        {
        return false;
        }
    }

    public int getSize() { return size; }
    public float getWeight() { return weight; }

    public String toString () 
    {
        return ("A " + size + "cm " + weight + "kg Fish");
    }
}

这是我的渔民类(class):

import java.util.*;

public class Fisher   
{
  private String name;
  private Fish [] fishCaught;
  public int numFishCaught; 
  private int keepSize;
  public static int LIMIT = 10;

  public String getName() 
  {
    return this.name;
  }

  public int getNumFishCaught()
  {
    return this.numFishCaught;
  }

  public int getKeepSize()
  {
    return this.keepSize;
  }

  public Fisher(String n, int k)
  {
    name = n;
    keepSize = k;
  }

  public String toString()
  {
    return(this.name + " with " + this.numFishCaught + " fish");
  }
  private ArrayList<Fish> fishesCaught = new ArrayList<Fish>();


  public void keep(Fish fish) 
  {
    if(this.numFishCaught < LIMIT)
    {
      fishesCaught.add(fish);
      numFishCaught++;
    }
  }

  public boolean likes(Fish fish)
  {
    if(fish.size >= this.keepSize)
    {
      return true;
    }

    else 
    {
      return false;
    }
  }

  public void listThingsCaught() 
  {
    System.out.println(this.toString());

    for(Fish fish : fishesCaught)
    {
      System.out.println(fish.toString());
    }
  }

  public void goFishingIn(Lake lake)
  {
    Fish fish = lake.catchSomething();

    if(likes(fish))
    {
      this.keep(fish);
    }
    else
    {
      lake.add(fish);
    }
  }

  public void giveAwayFish(Fisher fisher, Lake lake)
  {
    for(Fish fish : fishesCaught)
    {
      if(fisher.likes(fish))
      {
        fisher.keep(fish);
      }
      else
      {
        lake.add(fish);
      }
    }
    fishesCaught.clear();
    this.numFishCaught = 0;
  }



}

和我的湖课

public class Lake 
{
    private Fish[]  catchableThings;
    private int   numThings;

    public Lake(int capacity) 
    {
        catchableThings = new Fish[capacity];
        numThings = 0;
    }

    public int getNumCatchableThings() { return numThings; }
    public boolean isFull() { return numThings == catchableThings.length; }
    public String toString() { return "Lake with " + numThings + " catchable things"; }

    // Add the given thing to the lake
    public void add(Fish aCatchableThing) 
    {
        if (numThings < catchableThings.length)
            catchableThings[numThings++] = aCatchableThing;
    }

    // Choose a random thing to be caught in the lake and return it
    public Fish catchSomething() 
    {
        if (numThings == 0) return null;

        int index = (int)(Math.random() * numThings);
        Fish f = catchableThings[index];
        catchableThings[index] = catchableThings[numThings-1];
        catchableThings[numThings-1] = null;
        numThings--;
        return f;
    }

    // List all things in the lake
    public void listAllThings() 
    {
        System.out.println("  " + this + " as follows:");
        for (int i=0; i<numThings; i++)
            System.out.println("    " + catchableThings[i]);
        System.out.println();
    }
}

最佳答案

请在您添加权重的位置发布您的逻辑。

sumOfWeight =++weight 会将 sumOfWeight 重置为 ++weight,而不是将 weight 添加到 权重总和

public class Lake {

    private float sumOfWeight;

    public void add(Fish fish) {
        ...
        sumOfWeight += fish.getWeight();
    }

    public void remove(Fish fish) {
        ....
        sumOfWeight -= fish.getWeight();
    }

    public float getLakeWeight() {
        return this.sumOfWeight;
    }
}

关于java - 如何计算对象中的某些属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21945566/

相关文章:

java - Powermock 在模拟静态对象时使用 spring 注入(inject)错误模拟对象

java - 什么时候使用 try multi catch?

oop - Go 结构中的 omitempty 用例有哪些?

C++继承问题

java - 用java编写一个程序,返回一个新数组,该数组包含大于数组中第一个值的所有值

java - Android 上 SoundPool 的奇怪错误

c - 似乎没有调用 ex19 Learn C The Hard Way 中的 void *self

ios - 适用于 iOS 的 OpenGL 对象加载器

java - 更改嵌套循环中静态类变量的值

javascript - 尝试比较 Javascript 中不同数组中的对象