gpt4 book ai didi

java - ArrayList 覆盖自身

转载 作者:行者123 更新时间:2023-11-29 06:59:04 25 4
gpt4 key购买 nike

我在尝试创建对象 Frame 的 ArrayList 时遇到了问题。在一个循环中,我总是创建一个 Integers 的 ArrayList,然后使用此命令将新的 Frame 添加到 ArrayList packetList。

packetList.add(new Frame(tempFrameList, size, count));

我的问题是,我总是以一个包含正确数量帧的数组结束,但每个帧都完全相同,包含最后添加的帧的值。

我认为问题不在于文件的读取方式,因为当我将 println 添加到循环中时,我将元素添加到数组中,值是正确的。

这是我向 ArrayList 添加元素的代码:

public class OpenFile {
static Pcap pcap;
static PcapPacket packet = new PcapPacket(JMemory.POINTER);
static List<Frame> packetList = new ArrayList<Frame>();

public void init(){
final StringBuilder errbuf = new StringBuilder(); // For any error msgs
final String file = "trace-1.pcap";
int count = 0;
int size;
List<Integer> tempFrameList;

pcap = Pcap.openOffline(file, errbuf);

while (pcap.nextEx(packet) == Pcap.NEXT_EX_OK) {
tempFrameList = new ArrayList<Integer>();
count++;
size = packet.size();

for (int i = 0; i < size; i++) {
tempFrameList.add(packet.getUByte(i));
}

//here is my problem
packetList.add(new Frame(tempFrameList, size, count));
}

pcap.close();
}
}

这是来自类 Frame 的代码:

 public class Frame{
private static List<Integer> frame = new ArrayList<Integer>();
private static int size;
private static int serialNum;


public Frame(List<Integer> data, int newSize, int num) {
Frame.frame = data;
Frame.size = newSize;
Frame.serialNum = num;
}
}

最佳答案

这是你的问题:

public class Frame{
private static List<Integer> frame = new ArrayList<Integer>();
private static int size;
private static int serialNum;

Frame 的成员不应该是静态的,因为静态成员在该类的所有实例之间共享。删除静态关键字。

相应地更改构造函数:

public class Frame {
private List<Integer> frame = new ArrayList<Integer>();
private int size;
private int serialNum;


public Frame(List<Integer> data, int newSize, int num) {
this.frame = data;
thus.size = newSize;
this.serialNum = num;
}
}

关于java - ArrayList 覆盖自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29194192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com