2013-09-07 2 views
0

이 코드를 작동시킬 수없는 것 같습니다. 내가하고있는 일은 배열에 2 자리 숫자의 가능한 모든 조합을 채우는 것입니다 (이 숫자는 각각 모양과 색상을 나타냅니다). 그런 다음이 배열을 사용하여 이전 배열에있는 요소의 가능한 모든 조합을 만드는 2 차원 배열을 채우려고합니다. 어떤 이유로 든 제 2D 배열은 어떤 종류의 조합 대신에 모든 '21'로 채워집니다.가능한 모든 조합을 찾는 데 도움이 필요합니다. 거의 완료 방법

필요하다면 나머지 코드를 클래스에 게시 할 수 있지만 다소 길다. 이 메서드의 마지막 루프는 테스트 용으로 인쇄하기 위해 사용되며 나중에 삭제됩니다.

public void combinations() 
{ 
    combinations = new int[numShapes*numColors]; 
    int index = 0; 
    for(int l = 1; l <= numShapes; l++) 
     for(int h = 1; h <= numColors; h++) 
      if(index + 1 != combinations.length + 1) 
       combinations[index++] = (l*10) + h; 
      else 
       break; 

    int[][] combs = new int[(int)Math.pow((numShapes*numColors),numPositions)][numPositions]; 

    //Fills the array with all '21' , fix this 
    int ind = 0; 
    for(int f = 0; f < 16; f++) 
     for(int i = 0; i < numShapes; i++) 
      for(int j = 0; j < numColors; j++) 
       if(ind != combs.length+1){ 
        combs[ind] = new int[]{combinations[numShapes], combinations[numShapes], combinations[numColors]}; 
        ind++; 
       } 
       else 
        break; 

    for(int p = 0; p < 2; p++){ 
     for(int g = 0; g < 3; g++){ 
      System.out.print(testFormat(combs[p][g]/10, combs[p][g]%10) + " "); 
     } 
     System.out.println(); 
    } 
} 
+0

조합이 무엇인지 분명하지 않습니다. '나는이 코드를 작동시킬 수 없다. 내가하고있는 일은 배열에 가능한 모든 2 자리 숫자의 조합을 채우는 것입니다. ' 배열을 00-99로 채우는 것을 의미합니까? – Cruncher

+0

문제가 생겼을 때 도움이 될 것입니다. http://stackoverflow.com/questions/11343848/java-permutation-of-arraylist-elements-integer-cant-get-it-to-work-proper –

+0

그랜드 마스터의 게임을 프로그래밍하고 있습니다. 이 게임에서 사용자는 모양과 색상 조합의 길이가 n 인 코드를 작성합니다. 저는 n을 5로 제한하고 모양과 색상의 수를 5로 제한하고 있습니다. 저는 1-5 자릿수의 색깔과 1-5 자릿수의 자국을 표현했습니다. 예를 들어 내 프로그램의 11은 'Circle Red'입니다. 나는 가능한 모든 조합의 색상/모양/위치에 사용자 입력이 배열을 채우려고 시도하고 있습니다. 이 방법은 4 클래스 프로그램의 일부이므로 엄청난 텍스트의 벽을 게시하고 싶지 않았습니다. 미안 하하. – user2757330

답변

0
int[][] combs = combinationsOf(combinations, 5); 

    for (int i = 0 ; i < combs.length ; i++) 
    { 
     for(int j = 0 ; j < combs[i].length ; j++) 
     { 
      System.out.print(combs[i][j] + ", "); 
     } 
     System.out.println(""); 
    } 


public static int[][] combinationsOf(int[] colorShape, int numPositions) 
{ 
    int[][] combs = new int[(int)(Math.pow(colorShape.length, numPositions))][numPositions]; 

    int[] holding = new int[numPositions]; 
    for(int i = 0 ; i < numPositions ; i++) 
    { 
     holding[i]=0; 
    } 

    for(int i = 0 ; i < combs.length ; i++) 
    { 
     for(int j = 0 ; j < numPositions ; j++) 
     { 
      combs[i][j] = colorShape[holding[j]]; 
     } 
     incrementHolding(holding, colorShape.length); 
    } 
    return combs; 
} 

public static boolean incrementHolding(int[] holding, int max) 
{ 
    for(int i = holding.length-1 ; i >= 0 ; i--) 
    { 
     if(holding[i]+1 == max) 
     { 
      if(i==0) 
       return false; 
      holding[i]=0; 
     } 
     else 
     { 
      holding[i]++; 
      return true; 
     } 
    } 
    return true; 
} 

이 지금 나를 위해 작동합니다. 그래도 많은 코드가 있습니다. 그리고 그것은 실행하는 데 시간이 걸립니다.

참고 : 배열의 위치는 9,765,625 개입니다.

+0

감사합니다. 그러나 위치 수는 최대 5 개까지 가능합니다.이 코드는 == 2 위치에서만 작동합니까? – user2757330

+0

당신은 색깔과 모양 이상의 것을 가질 수 있다는 것을 의미합니까? 2 자리 숫자를 숫자로 바꾸면 제대로 작동합니다. 인쇄를 제외하고. 그러나 당신이 인쇄를 처리 할 수 ​​있다고 확신합니다. – Cruncher

+0

아, 알겠습니다. 나가 그것을 일할 수 있는지 나는 진짜로 빨리 시험하게하십시오. – user2757330

관련 문제