我有一个大小为5的数组和以下元素 -
int[] a = new int[] {0, 10, 20, 30, 40};
我想要做的是创建一个子数组,其中包含[index]中的元素,直到[index + size]
为了实现这个目的,我正在做的事情。我这样做了一个类构造函数 -
public CoolName(int index, int size, int[] array) {
int counter = 0;
this.a = array;
while(counter < size) {
if(index <= (size + index)) {
array[counter] = array[index];
counter++;
index++;
}
else
break;
}
}
然而,当我尝试使用我的main方法输出它时,这就是打印的内容 -
Subarray after modification:
s[0]: 20
s[1]: 300
s[2]: 20
s[3]: 30
s[4]: 40
问题 - 我只想要从索引到索引+大小的元素,如果我传递索引2和大小2,我只想要总共2个元素(这是大小)
这是我的预期输出 -
Subarray after modification:
s[0]: 20
s[1]: 300
所以基本上,我不希望显示额外的元素。我知道它打印所有元素导致我设置this.array = a
,因此它得到了原始数组的大小。
但是,有人可以告诉我这个问题的可能解决方法吗?感谢您解答我的问题!
答案 0 :(得分:1)
使用System.arraycopy()
。像这样:
import java.util.Arrays;
/**
<P>{@code java CopyArraySubset}</P>
**/
public class CopyArraySubset {
public static final void main(String[] ignored) {
int[] origInts = new int[] {0, 10, 20, 30, 40};
int startIdx = 2;
int newArrayLen = origInts.length - startIdx;
int[] intsSubset = new int[newArrayLen];
System.arraycopy(origInts, startIdx, intsSubset, 0, newArrayLen);
System.out.println("origInts=" + Arrays.toString(origInts));
System.out.println("intsSubset=" + Arrays.toString(intsSubset));
}
}
输出:
[R:\jeffy\programming\sandbox\xbnjava]java CopyArraySubset
origInts=[0, 10, 20, 30, 40]
intsSubset=[20, 30, 40]
答案 1 :(得分:1)
我认为您应该使用Arrays.copyOfRange()
来创建数组的副本:
public CoolName(int index, int size, int[] array) {
this.a = Arrays.copyOfRange(array, index, index+size);
}
答案 2 :(得分:0)
public int[] getSubArray(int[] array, int index, int size) {
int[] subArray = new int[size];
int subArrayIndex = 0;
for (int i = index; i < index + size; i++) {
subArray[subArrayIndex] = array[i];
subArrayIndex++;
}
return subArray;
}