2017-04-18 179 views
-2

我试图整数整数和整数整数,到目前为止我的成功很少。整数整数与整数的整数

我具有从0 18个整数对于欲洗牌

int[] chunks = {2, 3, 10, 3}; 

整数的阵列开始像0整数的每个组块的阵列,以17

array = new int[18]; 
for(int i = 0; i < 18; i++){ 
    array[i] = i; 
} 

和阵列, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 当2的块数组的第一个元素被选中时,前2个数组的元素0和1被选中。 1移动到数组的末尾,然后0。

现在的顺序是2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,0,1

对于第二块数组的元素,它的值为3,所以选择2,3,4并放在0和1之上。

现在订单是5,6,7,8,9, 10,11,12,13,14,15,16,17,2,3,4,0,1

这一直持续到整数的阵列完全符合所有块

数组洗好的与大块充分洗牌是15,16,17,5,6,7,8,9,10,11,1 2,13,14,2,3,4,0,1

研究

我已经尝试了编程的方面,这至今已经与

for(int i = 0; i < chunks[0] i++) { 
    int first = array[0]; 
    System.arraycopy(array, 1, array, 0, array.length-1); 
    array[array.length - 1] = first; 
} 

更新

这是我正在使用的代码现在我得到以下结果 10,11,12,13,14,15,3,4,5,6,7,8,9,1,1,1,1,1 ,而不是 15,16,17,5,6,7,8,9,10,11,12,13,14,2,3,4,0,1

int[] array2 = array.clone(); 
    int temp = array2[0]; 
    int chunkIndex = 0; 
    int count = 0; 
    int chunkCount = 0; 

    //Loops 4 times 
    for(int i = 0; i < chunks.length; i++) { 
     //Loops as many times for the chunk element 
     while(chunks[i] > count) { 
      for(int k = 1; k < array2.length; k++) { 
       //Move all the elements back 
       array2[k-1] = array2[k]; 
      } 

      chunkIndex = array2.length-1 - chunkCount; 
      array2[chunkIndex] = temp; 

      temp = array2[0]; 

      count++; 
     } 

     //Increment the limit 
     chunkCount += chunks[i]; 
     //System.out.println(chunkCount); 

     } 

任何帮助将不胜感激,如果你需要我澄清任何事情让我知道。

谢谢

+0

如果您可以与我们分享您迄今尝试过的代码,可能会有帮助吗? –

+0

即使是你的for循环中的语法错误,也不会编译,因为你想把一个'Array'分配给一个'int'的最后一行('array [']'是一个'int' ) –

+0

是的你是对的,这是我的错。我的意思是放入第一个而不是数组 – user221

回答

0

我不会给你的代码,因为这是一个很好的练习。

但首先,不要再次复制阵列,并再次复制阵列。

一个基本的解决办法是:

1 - Read the chunk length 
2 - Save the first value in a temp variable 
3 - Shift every value on the left 
4 - Put the temp variable at the end 

这是在一个阵列到移位的值的简单方法。

现在,对于每个块,您需要将值放在最后一个值之前,所以您只需要记住此块的index在哪里。这只是lastIndex - chunk length。这将是转移的限制以及将温度值放在哪里。

有了这个,你可以很容易地写出一个解决方案,在最佳状态下工作。

病程中出现一些问题,如果成批读出许多价值(如果你想12个单元的阵列中的13项

编辑:

1 - 你应该保存temp前移动阵列,你首先覆盖值,然后试着去获得它

2 - 你总是在移动整个阵列,所以你要移动第一个块后,你已经移动它。 index即递减

int endIndex = array2.length; //### 2 ### 
while(chunks[i] > count) { 
    temp = array2[0]; //### 1 ### 

    for(int k = 1; k < endIndex; k++) { //### 2 ### 
     //Move all the elements back 
     array2[k-1] = array2[k]; 
    } 

    ... 
} 
endIndex -= chunks[i]; 

它应该好一点,我没有时间来测试这种不幸。

+0

谢谢你,我对如何解决这个问题有了更好的理解。我已经差不多完成了它,但是我最后仍然在数组中覆盖元素。 – user221

+0

@Aaron,检查这几个更新,应该会更好。我认为你离我的解决方案不远。但是这仍然需要一些改进。 – AxelH

+0

该更新确实帮助了我。我的程序正在按照预期对整个整数进行洗牌。感谢您帮助我解决它! – user221