简体   繁体   中英

how to do i keep a count on certain attributes in objects

Hi I have been trying to keep a count on the float in each object so that I can get a sum of all the floats. the float represents weight so I have tried to do the following: i declared a weight sum as float sumOfWeight; and the say sumOfWeight = ++weight; but it was not been working out, any suggestions ?

  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));

here is my fish class:

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");
    }
}

and here is my fisher 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;
  }



}

and my lake class

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();
    }
}

Please post your logic where you are adding weights.

sumOfWeight = ++weight will reset the sumOfWeight to ++weight instead of adding weight to sumOfWeight

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;
    }
}

Can you please post the structure of your class so that we can see what are the types of member variables defined in your class. Try declaring sumOfWeight as static varibale to keep count of weights of all objects instantiated of your class.

You want sumOfWeight = sumOfWeight + weight;

What you wrote was "add 1 to weight" and then set sumOfWeaght to that value.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM