java链表问题

时间:2010-11-06 18:16:35

标签: java linked-list

我编写了一些带有3个简单类的Java代码,其中第一个是Controller,它有main方法,并创建其他类的实例。 Floaters是一个类,它创建一个Floater实例的链表,每个实例都有一个特定的长度和布尔值来表示它们是否是垂直的。正如在第一类的注释行中所说的那样,我的问题是“人类”和“水獭”Floaters实例都被分配了相同的值,因此具有相同的大小....

有关如何解决此问题的任何建议吗?

提前致谢!

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

4 个答案:

答案 0 :(得分:3)

llf - 班级中的Floatersstatic。当你将变量设为静态时,它们会链接到类而不是实例,因此Floaters的两个实例都使用相同的列表。

要解决此问题,只需从变量声明中删除static即可。

答案 1 :(得分:0)

在浮子中,llf不应该是静态的

答案 2 :(得分:0)

由于static

private static LinkedList<Floater> llf;

在这种情况下,static表示一个类字段,在类的所有实例之间共享。

答案 3 :(得分:0)

例如 - Java中的数学函数被声明为类java.lang.Math的静态metohods,matemathematical常量是此类的静态属性。因此,如果你使用sin(x),你总是使用相同的方法。