代码中的惊人bug

时间:2012-07-12 22:01:12

标签: java android eclipse swing arraylist

直升机。我有两个arraylist:

public static ArrayList<Shop> shops;

字段:public static double dist;

和第二个arraylist:public static ArrayList<Double> for_sort_shops;

我也有一个代码:

for (int i = 0; i < shops.size(); i++) {
    Log.i("palval", "for_sort_shops.get(i) = "
            + for_sort_shops.get(i));
}

for (int i = 0; i < shops.size(); i++) {
    shops.get(i).dist = for_sort_shops.get(i);
}

Log.i("palval", "---------------------------------------");
for (int i = 0; i < shops.size(); i++) {
    Log.i("palval", "shops.get(i).dist = "
            + shops.get(i).dist);
}

我得到了什么结果?

enter image description here

怎么可能?! 帮助我理解。

3 个答案:

答案 0 :(得分:10)

您声明dist静态,这意味着它的值在类级别定义并在所有实例之间共享。在您的程序中,您只能看到分配给它的最后一个值。

答案 1 :(得分:3)

你的领域是

public static double dist

因为它是static,所以整个dist类只有一个Shops值。

您需要为每个static设置此值非Shop才能拥有自己的dist值。

答案 2 :(得分:2)

由于您的字段public static double dist;是静态的,因此在整个代码执行过程中只有一个字段。所以你要一遍又一遍地更新同一个变量。从dist的static处取下,以达到理想的效果。