为什么最后一个对象会在ArrayList中多次复制?
我试图将名为City的类的对象添加到ArrayList
。 这是该类的代码
public class City { public static int x; public static int y; City(){ Random rand = new Random(); this.x = rand.nextInt(100)+1; this.y = rand.nextInt(100)+1; } }
这是我的Main类的代码
public static int N = 10; public static ArrayList cities = new ArrayList(); public static void main(String[] args) { for (int i=1; i<N; i++){ cities.add(new City()); } for (City c : cities) System.out.print("("+c.x+", "+c.y+")"); } }
println
的结果总是相同的,似乎数组列表只存储其所有元素中添加的最后一个对象。
例如,我运行程序时得到的结果是:
(52, 93)(52, 93)(52, 93)(52, 93)(52, 93)(52, 93)(52, 93)(52, 93)(52, 93)
为什么我得到那个结果? 我怎么能修好?
提前致谢!
City
中的x
和y
变量标记为static
。 static
成员在class
所有实例之间共享,因此是全局变量。 您需要对代码进行一些更改:
- 将city中
x
和y
变量的声明更改为private int x
和private int y
。 理想情况下,一个类的字段不应该是public
。 有关详细说明,请参阅此答案。 - 在
City
类中添加getX
和getY
方法。 - 在
main
方法中,使用getX
和getY
访问x
和y
。
您应该将City
类的成员更改为非静态:
public int x; public int y;
静态成员在类的所有实例之间共享,因此所有实例都具有相同的值。