2017-04-18 5 views
-2

정수 배열에 덩어리를 섞어 쓰려고하는데 지금까지 거의 성공하지 못했습니다.정수의 정수 배열을 셔플 링

는 난

int[] chunks = {2, 3, 10, 3}; 
int 치의 어레이는 0과 같은 시작

셔플하고자하는 int 각 청크 17

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

0 내지 18 int 배열 및 배열을 가질 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,10111213141516170,1

입니다 엘리먼트는 청크 배열의 3을 가지므로 2,3,4가 선택되고 0과 1의 최상위에 놓입니다.

이제는 5,6,7,8,9, int 치의 배열이 완전히 덩어리

배열의 모두와 함께 단행 될 때까지 10111213141516172340,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,10111213142340,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' 루프의 문법 에러에 의해서조차도 이것은'int'에'Array'를 할당하고자하는 마지막 라인 때문에 컴파일되지 않습니다 ('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,이 몇 가지 업데이트를 확인하십시오. 당신은 내 생각과는 거리가 멀다. 그러나 이것은 아직도 약간의 improvment을 필요로한다. – AxelH

+0

업데이트가 정말 도움이되었습니다. 내 프로그램은 이제 int를 통해 예상대로 뒤섞입니다. 내가 해결하도록 도와 줘서 고마워! – user221