java—将数组值重新排列为新数组

jrcvhitl  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(444)

我已经编写了这个代码,它应该获取数组中的最后8个值并反转它们,然后放入新numbs[]数组的第一个插槽中。但是,我还希望numbersarray中的{1,1,1,1,1,4}值添加到numbs[]数组中最后8个值之后,而不进行反转。这应该是动态的,所以如果numberarray[]中有24个值,那么应该有3个组,其中偶数组的值要反转。

numbersArray = new int[] { 1, 1, 1, 1, 1, 1, 1, 4, 2, 2, 2, 2, 2, 2, 2, 1 };
int[] numbs =  new int[numbersArray.length];

for (int i = 0; i < numbersArray.length; i++) {
        numbs[(i % 16) < 8 ? i : (8 - (i % 8) - 1)] = numbersArray[i];
}

结果:

numbs[] = [1, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0]

我希望数组实际显示:

numbs[] = [1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 4]
omtl5h9j

omtl5h9j1#

把这个加到你的代码里

for (int i = 8; i < numbersArray.length; i++) {
    numbs[i] = numbersArray[i-8];
}
xmd2e60i

xmd2e60i2#

好像你想用数组。尽管使用集合也可以很容易地完成。
下面的代码有一些限制。数组大小>=16可以进一步优化。。

int[] numbersArray = new int[] { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int[] newArr = new int[numbersArray.length];

int x =8,y=8,j=-1;

for(int i = numbersArray.length-1;i>-1;i--){
  if(x!=0){
    newArr[++j] = numbersArray[i];
    if(x==1){y=8;}
    x--;
  }
  else{
    newArr[j + y ]= numbersArray[i];
    if(y==1){x=8;j=j+8;}
    y--;
  }
}

for(int v:newArr)
    {System.out.println(v);}

  }

相关问题