制作子阵列时出错

时间:2014-03-09 03:35:51

标签: java arrays

我有一个大小为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,因此它得到了原始数组的大小。

但是,有人可以告诉我这个问题的可能解决方法吗?感谢您解答我的问题!

3 个答案:

答案 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;
}