gpt4 book ai didi

java - 如何在数组中间添加?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:37:34 25 4
gpt4 key购买 nike

我正在尝试创建一个名为 insertAt 的方法,它接受 3 个参数(int index、int n、int value),这样如果我调用:list.insertAt(2, 4, 98) 在数组 [12, 42, 8, 934] 上,它现在应该存储 [12, 42, 98, 98, 98, 98, 8, 934]。

int index 是我开始放置值的地方

int n是多少个值

int value 是我要输入的实际值或数字。

我在一个名为 ArrayIntList 的类中制作这个方法:

public class ArrayIntList {
private int[] elementData; // list of integers
private int size; // current # of elements in the list
}

我尝试制作下面的方法,但我仍然坚持我所缺少的东西。如果你们能帮助我,我将不胜感激!

public void insertAt(int index, int n, int value) {
if (index < 0 || index > size || n < 0) {
throw new IllegalArgumentException();
}
size = size + n;
for (int i = 0; i < n; i++) {
elementData[(size - 1) - i] = elementData[(size - n) + i];
elementData[n + i] = value;
}
}

最佳答案

示例中的数组仅包含 4 个值,但您尝试添加 4 个额外的值。这是不可能的,因为数组具有固定长度。所以你必须创建一个长度为 size + n 的新数组:

int[] newElements = new int[size + n];

然后您必须复制从 0index 的所有元素以及从 indexsize 的元素> 从旧数组到新数组:

System.arraycopy(elementData, 0, newElements, 0, index);
System.arraycopy(elementData, index, newElements, index + n, size - index);

然后你必须将你的新元素插入数组 n 次:

Arrays.fill(newElements, index, index + n, value);

最后,您必须将新数组重新分配给旧实例一并设置新大小:

elementData = newElements;
size += n;

我使用了 JDK 中的一些辅助方法,例如 System.arraycopy,它具有以下签名:

void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);

它将 src 范围从 srcPossrcPos+length 的元素复制到 dest 范围从 destPosdestPost+length

Array.fill 也是一个很好的助手,具有以下签名:

void fill(int[] a, int fromIndex, int toIndex, int val)

它用值val填充从fromIndextoIndex的数组a

关于java - 如何在数组中间添加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54756172/

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