当前位置: 首页 > 面试题库 >

为什么最后一个对象在ArrayList中被复制多次?

宗政洋
2023-03-14
问题内容

我正在尝试将名为 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;
    }
}

这是我的 主班 的代码 __

    public static int N = 10;
    public static ArrayList<City> cities = new ArrayList<City>();

    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)

为什么我得到那个结果?我该如何解决?

提前致谢!


问题答案:

xy变量City被标记为static。甲static构件跨过的所有实例共享class,并且因此是一个全局变量。您需要对代码进行几处更改:

  1. 将city中的xy变量的声明更改为private int xprivate int y。理想情况下,一类的字段不应为public。请参阅此答案以获取详细说明。
  2. 在类中添加getXand和getYmethod City
  3. 在该main方法中,访问xy使用getXgetY


 类似资料:
  • 问题内容: 为什么我添加到ArrayList中对象只包N个最后一个元素? 问题答案: 此问题有两个典型的原因: 你存储在列表中的对象使用的静态字段 意外将同一对象添加到列表 静态场 如果列表中的对象将数据存储在静态字段中,则列表中的每个对象将看起来是相同的,因为它们具有相同的值。考虑下面的类: 在该示例中,由于声明了,因此在所有实例之间只有一个共享。(请参阅“了解班级成员”教程。) 如果使用以下代

  • 问题内容: 我想快速删除最后一个对象。 我知道这需要个,但是我想知道是否可以在恒定时间内执行此操作,因为我只想删除 最后一个 对象? 问题答案: 请参阅的文档,如以下语法所示: 这是它的实现方式。确实背衬阵列上的查找(因此它可以切断它从阵列松),这应该是恒定的时间(因为JVM知道一个对象引用的大小,它可以计算偏移量的条目的数量),并且是用于这个案例:

  • 我目前正在学习Java中的多态性,任务的一部分是创建一个程序,使用继承和多态性打印出各种子类。我试图寻找解决方案,但似乎找不到其他人遇到这个问题。 下面是一段代码,应该分别打印和。然而,输出是,。 我已经尝试过使用Eclipse进行调试,但我无法确定错误是什么。在这一点上我真的很困惑,过去一周我一直在尝试这个问题,但没有结果。如果这是一个简单的问题,请原谅我,但我不知道出了什么问题。我真的很感激任

  • 我目前有一个ArrayList,其中包含“Product”对象,每个对象中包含一个字符串、整数和double。我希望能够使用参数搜索对象,找出与搜索参数匹配的ID(整数值),并将此对象复制到另一个ArrayList中。有没有可能通过迭代器实现这一点,或者有没有更简单的方法?

  • 我有这个数组的对象,我想删除最后一个对象。有人能让我知道这样做吗?

  • 问题内容: 在JDK 1.7中,存在一个声明。 他们为什么要制造新的而不使用: 问题答案: 因为通过返回的 后盾 给定的数组。它包装该数组;数组的更改反映在中,反之亦然。 另外,因此,返回的此处具有固定大小。因此,它不能是因为可以增长或收缩。