2017-04-18 110 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