我有一个java数组。我想从数组中删除第一个d
项并将其存储到其他数组中。我能够存储但无法删除。我的代码
private static void itemRemove(int[] inputArr, int d) {
int newArr [] = new int[d];
for(int i=0;i<d;i++){
newArr[i] = inputArr[i];
}
itemPrint(inputArr);
itemPrint(newArr);
}
所以在示例中假设我有数组
inputArr
为[1,2,3,4,5]
,d
为2
我可以添加到newArray
[1,2]
但无法从inputArr
中删除。
此外,一旦我从inputArr
删除了大小为5的两个元素,那么我可以再添加两个元素。任何人都可以知道如何添加元素。
答案 0 :(得分:1)
您需要创建一个大小为int[]
的新inputArr.length - d
数组并复制值:
private static int[] itemRemove(int[] inputArr, int d) {
int[] newArrd = new int[d];
int[] newArr = new int[inputArr.length-d];
int newArrIdx = 0;
for(int i=0;i<inputArr.length;i++){
if(i<d){
newArrd[i] = inputArr[i];
}else{
newArr[newArrIdx++] = inputArr[i];
}
}
return newArr;
}
答案 1 :(得分:0)
你在这里没有做任何删除:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="go">
TRANSITION
</button>
<textarea></textarea>
您只需将输入数组中的值复制到新数组即可。输入数组没有改变。
Java中的数组具有固定大小,因此无法删除元素。您可以对此进行近似的典型方法是使用某个标记(或“哨兵”值)替换该元素。对于对象,可以是for(int i=0;i<d;i++){
newArr[i] = inputArr[i];
}
。对于原始值,例如整数,您可能只需要任意选择一个值:
null
这显然不是一个很好的解决方案。如果-999已经在数组中了怎么办?
处理此问题的正确方法是使用for(int i = 0; i < d; i++) {
newArr[i] = inputArr[i];
inputArr[i] = -999; //marked for removal
}
。 List
不是固定大小的,因此可以删除元素。您可以使用多种实现。 ArrayList
最接近数组。
您的功能(更改为使用List
)可能如下所示:
ArrayList
这里发生了一些不同的事情。最值得注意的是,我们有private static void itemRemove(List<Integer> inputArr, int d) {
List<Integer> newArr = new ArrayList<>();
int removed = 0;
while (removed < d)
{
newArr.add(inputArr.remove(0));
removed++;
}
itemPrint(inputArr);
itemPrint(newArr);
}
,现在我们有int[]
。我们正在使用名为&#34; generics&#34;和generics don't work with primitive types,所以我们需要使用名为the "boxed type"的内容。
另一个明显的变化是循环不同。存在困难removing from collections while you are iterating over them并且我以不同方式构造循环以避免此问题。
答案 2 :(得分:0)
您可以这样做:
public class Test {
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6};
System.out.println("Original Array");
itemPrint(array);
itemRemove(array, 2);
array = itemsLeft(array,2);
System.out.println("Original Array After Removing Items");
itemPrint(array);
}
private static void itemRemove(int[] inputArr, int d) {
int newArr [] = new int[d];
for(int i=0;i<d;i++) newArr[i] = inputArr[i];
System.out.println("New Array");
itemPrint(newArr);
}
private static void itemPrint(int[] array) {
for(Integer i : array) System.out.println(i);
}
private static int[] itemsLeft(int[] inputArr, int d) {
int [] itemsLeftArr = new int[inputArr.length-d];
for(int i=d, j=0; i<inputArr.length; i++, j++) {
itemsLeftArr[j] = inputArr[i];
}
return itemsLeftArr;
}
}
<强>输出:强>
Original Array
1
2
3
4
5
6
New Array
1
2
Original Array After Removing Items
3
4
5
6
答案 3 :(得分:0)
要从Array中删除元素,您还需要删除该元素的现有索引。
由于java中的数组是不可变的,因此您需要将数组值重新分配给新数组,就像使用newArr [index]
一样只是为了删除数组元素而不改变索引,你可以像这样使用预定义的commons.apache.org库:
SUBSTRING
或者,您可以使用arraylist而不是this来动态调整数组大小。您可以像这样初始化输入数组:
SELECT SUBSTRING(@Attachment,
CHARINDEX('"', @Attachment)+1,
CHARINDEX('"', @Attachment,CHARINDEX('"', @Attachment)+1)-CHARINDEX('"', @Attachment)-1)
要从inputArr中删除带索引位置的元素,只需使用list的remove(int index)方法。
array = ArrayUtils.removeElement(array, element)
答案 4 :(得分:0)
您可以使用System.arrayCopy和Arrays.fill函数
来完成 int[] inputArr = {1,2,3,4,5};
int n = 3; //number of positions to move
int[] newArray = new int[n];//creating new array of size n
System.arraycopy(inputArr, 0, newArray, 0, n);//copying elements up to nth position to new array
System.arraycopy(inputArr, n, inputArr, 0, inputArr.length-n);//copying remaining elements to start position
Arrays.fill(inputArr, inputArr.length-n, inputArr.length, 0);//filling cells after the last element with default 0 value
itemPrint(newArray);
itemPrint(inputArr);
答案 5 :(得分:-1)
无法从数组中删除元素。你唯一能做的就是复制其他元素来覆盖它们。所以,如果您的数组看起来像这样:
1 2 3 4 5
你可以复制3,4和5来覆盖1和2,所以你将留下这个:
3 4 5 4 5
(注意4和5仍然存在)
然后你可以用你想要存储在数组中的新元素覆盖最后两个元素,这将留下你的信息:
3 4 5 6 7
要复制元素,您可以使用for
循环手动执行此操作,也可以使用System.arrayCopy()
。