我编写了一些带有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;
}
}
答案 0 :(得分:3)
llf
- 班级中的Floaters
为static。当你将变量设为静态时,它们会链接到类而不是实例,因此Floaters
的两个实例都使用相同的列表。
要解决此问题,只需从变量声明中删除static
即可。
答案 1 :(得分:0)
答案 2 :(得分:0)
由于static
:
private static LinkedList<Floater> llf;
在这种情况下,static
表示一个类字段,在类的所有实例之间共享。
答案 3 :(得分:0)
例如 - Java中的数学函数被声明为类java.lang.Math的静态metohods,matemathematical常量是此类的静态属性。因此,如果你使用sin(x),你总是使用相同的方法。