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

ArrayList仅添加最后一个元素

左丘恩
2023-03-14
问题内容

下面有一个for循环代码。我通过调用一个自定义显示函数发现aBook arrayList对象仅添加了最后一个类对象三次。为什么会这样呢?

Scanner s = new Scanner(System.in);
    ArrayList<LiFiAddressBook> aBook = new ArrayList<LiFiAddressBook>();
    // taking input for every LifIAddressBook and adding them to the ArrayList.
    for (int i = 0; i < 3; i++) {
        System.out.println("Entry " + i+1);
        System.out.print("Please Enter First Name: ");
        String a = s.nextLine();
        System.out.println();
        System.out.print("Please Enter Last Name: ");
        String b = s.nextLine();
        System.out.println();
        System.out.print("Please Enter Street Address: ");
        String c = s.nextLine();
        System.out.println();
        System.out.print("Please Enter City: ");
        String d = s.nextLine();
        System.out.println();
        System.out.print("Please Enter Zip Code: ");
        int e = s.nextInt();
      // in the next line we need to fire a blank scan function in order consume the nextLine. because after executing s.nextInt compiler skip a scan function for a weird reason
        s.nextLine();
        System.out.println();

        LiFiAddressBook x = new LiFiAddressBook(a, b, c, d, e);
        aBook.add(x);


    }

这是我的LiFiAddressBook类

public class LiFiAddressBook {

static  String  first_name, last_name, street_address, city_state;
static int zip_code;

public LiFiAddressBook(String first, String last, String street, String city, int zip) {
  //constructor for class object.
    first_name = first;
    last_name = last;
    street_address = street;
    city_state = city;
    zip_code = zip;
}

public  String get_first() {
    return first_name;
}

public String get_last() {
    return last_name;
}

public String get_address() {
    return street_address;
}

public String get_city() {
    return city_state;
}

public String get_zip() {
    return Integer.toString(zip_code);
}

public static void display() {
    System.out.println("First Name: "+first_name);
    System.out.println("Last Name: "+last_name);
    System.out.println("Street Address"+street_address);
    System.out.println("City State: "+city_state);
    System.out.println("Zip Code: "+zip_code);


}

}


问题答案:

由于使用static关键字,每次
public LiFiAddressBook(String , String , String , String , int )
调用构造函数时,旧值都会被新值覆盖,并且在打印列表中的元素时,LiFiAddressBook类的对象变量将指向相同的对象。因此打印相似的对象。

需要明确的是,实际上有3个LiFiAddressBook实例。但是这些LiFiAddressBook实例的变量/属性引用的是同一对象。



 类似资料:
  • 问题内容: 我有这个android代码,它从服务器中获取一个JSON并从该JSON填充一个ArrayList,我在onresponse空隙内检查了ArrayList“ meals”的大小,它给了我1,但是当我在StringRequest对象后对其进行检查时,我得到了0个项目。进餐在全局范围内定义,并在oncreateview函数内部进行初始化代码: 问题答案: 这里的问题是关于了解任务如何工作的。

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

  • 我需要添加具有复杂项目背景的ListView:顶部和底部的偶数/奇数和圆角不同。它看起来像这样: 我已经通过level-list实现了所有这些东西,但是还有一件事我想做。现在底部项目靠近屏幕底部。最好添加一些空间。 我不想向 ListView 添加下边距,我只需要最后一项的边距。 我认为这样做的方法是: 一种黑客行为——在ListView中添加带有空文本视图的页脚。但是页脚是相当不稳定的东西,它们

  • 问题内容: 在检测播放器与许多相同对象(在本例中为墙砖)之间的碰撞时,我遇到了一个问题。问题是我的程序仅在与 最后添加的 墙砖接触时才检测到碰撞。这是用java写的… 我正在使用矩形(它们的相交方法)来检测碰撞。 代码示例: 更新图块: 这是我的课程,使墙从砖块中脱颖而出: } 这是我的班级,使房间或房屋带有墙壁: } 将图块和墙壁添加到其arrayList中的代码: 在wallTile.java

  • 最近我在做一个像涂鸦跳跃这样的游戏,但是我有一个问题: 我为球员将要坠落的平台制作了一个动态阵列 然后我在阵列中随机添加11个平台,然后在冰柱之后添加另一个平台,在那里将创建玩家! 最后这将在屏幕中渲染。在我做了一个在渲染方法中接收玩家位置和平台位置的方法之后: 玩家仅停止阵列上的最后一个矩形!为什么会这样?我想让球员们堵住所有的矩形

  • 我有一个函数,可以为传入的用户数组(使用 RSA 算法)生成密钥对,它似乎为每个用户正确生成密钥并将它们添加到数组列表中。但是,当我尝试打印输出时,它似乎只打印最后一个元素。似乎无法弄清楚我做错了什么。 下面是生成密钥并返回数组列表的函数:-它将用户的字符串数组作为参数。 这是我如何测试它:- 我收到的输出是