开发者

java linked list problem

开发者 https://www.devze.com 2023-01-24 07:19 出处:网络
I have written some Java code with 3 simple classes where the first, Controller, has the main method and creates the instances of the other classes. Floaters is a classes that creates a linked list of

I have written some Java code with 3 simple classes where the first, Controller, has the main method and creates the instances of the other classes. Floaters is a classes that creates a linked list of Floater instances, each with a particular length and boolean value to say if they are vertical or not. My problem, as it says in the commented lines of the first class, is that both "humans" and "otters" Floaters instances are getting assigned the same values and thus have the same size....

Any suggestions on how to fix this?

Thanks in advance!

public class Controller{

   private static Floaters humans;
   private static Floaters otters;

   public static void main(String[] args)
   {
           otters = new Floaters();
           humans = new Floaters();

           otters.addFloater(2, true);
           otters.addFloater(3, true);

           //this should read "2" and it does
           System.out.println(otters.size());

           //this should read "0" but reads "2". Why?
           //How can I get it to read "0"?
           System.out.println(humans.size());
   }
}


import java.util.LinkedLi开发者_StackOverflowst;

 public class Floaters {

   private static LinkedList<Floater> llf;

   Floaters()
   {
           llf = new LinkedList<Floater>();
   }

   public void addFloater(int length, boolean is_vertical)
   {
           Floater floater = new Floater(is_vertical, (byte)length);
           llf.add(floater);
   }

   public int size()
   {
           return llf.size();
   }
}

public class Floater {

   int length;
   boolean is_vertical;

   Floater(boolean is_vertical,  int length)
   {
           this.length = length;
           this.is_vertical = is_vertical;
   }
}


The llf in your Floaters-class is static. When you make variables static, they're linked to the class rather than the instance, and thus both instances of Floaters use the same list.

To correct this, simply remove the static from your declaration of the variable.


in floaters, llf should NOT be static


Because of static:

private static LinkedList<Floater> llf;

In this case static means a class field, shared among all instances of a class.


For example - mathematic functions in Java are declared as static metohods of the class java.lang.Math, matemathematical constants are static atributes of this class. So if you use sin(x), you are using always the same method.

0

精彩评论

暂无评论...
验证码 换一张
取 消