如何仅使用非前导零复制int数组

我有一个 int 数组,它几乎没有前导零。我想将此数组复制到另一个不带前导零的 int 数组中。

这是我写的代码。但此代码仅复制非零整数。

原始数组:

     int samples[]= {0, 0, 0, 0, 0, 40, 0, 2532, 17, -2300, -17, -4000, 0, 2000, 1048, -420, 33, 15, -32, 2030, 3223, 0, 0};

新数组应该是:

    int noleadingzeroarray[] = {40,0,2532, 17, -2300, -17, -4000, 0, 2000, 1048, -420, 33, 15, -32, 2030, 3223, 0, 0};

代码:

 public static void trimSilenceFromBeginning(){

    int leadingZeros = 0;
    int samples[]= {0, 0, 0, 0, 0, 40, 0, 2532, 17, -2300, -17, -4000, 0, 2000, 1048, -420, 33, 15, -32, 2030, 3223, 0, 0};
    int noleadingzeroarray[]= new int[samples.length];
    int zeroscounter= 0;
    boolean nonzeroencountered  = false;

    if(samples[leadingZeros] == 0) {
        leadingZeros++;

    }

    for(int j= 0; j< samples.length; j++){

        if(samples[j]!=0 ) {
                noleadingzeroarray[zeroscounter] = samples[j];
                zeroscounter++;               
        }
    }
    System.out.println(Arrays.toString(noleadingzeroarray));
  }
} 

回答

Arrays.copyOfRange只使用arrays不涉及其他元素(集合等)。

将指定数组的指定范围复制到新数组中。范围 (from) 的初始索引必须介于零和 original.length 之间,包括 0 和 original.length。

3 行:

int start;
for (start = 0; start < samples.length && samples[start] == 0; start++) {}
int[] noleadingzeroarray = Arrays.copyOfRange(samples, start, samples.length);
  • 如果在 中找不到零samplesstart则将是0-整个数组将被浅复制
  • 如果找到前导零,start将在最后一个零位置之后分配起始索引。-一个子数组将被浅复制

不要对浅拷贝术语感到恐慌,它们是整数(原语)。没问题。


以上是如何仅使用非前导零复制int数组的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>