Darren
Darren

Reputation: 89

java linked list problem

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.LinkedList;

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

Upvotes: 0

Views: 1307

Answers (4)

Ondrej Sotolar
Ondrej Sotolar

Reputation: 1442

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.

Upvotes: 0

Peter Knego
Peter Knego

Reputation: 80340

Because of static:

private static LinkedList<Floater> llf;

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

Upvotes: 0

hvgotcodes
hvgotcodes

Reputation: 120198

in floaters, llf should NOT be static

Upvotes: 0

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.

Upvotes: 3

Related Questions