繁体   English   中英

制作子阵列时出错

[英]Error making a sub-array

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

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

使用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]

我认为你应该使用Arrays.copyOfRange()来创建数组的副本:

public CoolName(int index, int size, int[] array) {
    this.a = Arrays.copyOfRange(array, index, index+size);
}
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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM