我似乎无法使用此代码。我正在做的是用两个数字的所有可能组合填充数组(这些数字中的每一个分别代表形状和颜色)。然后,我试图使用这个数组来填充一个2d数组,其中我创建了前一个数组中所有元素的所有可能组合。出于某种原因,我的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 :(得分: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;
}
这对我有用。虽然这是很多代码。运行需要一段时间。
注意:在5个位置,阵列有9,765,625个元素。