私はJavaをまったく使い始めたばかりです。私はAndroidゲームを書いていますが、指定された数になる可能性のあるすべての合計(2を含むまたは8より大きい数を含む組み合わせを除く)を含むint配列の配列を生成する必要があります。
例:
ganeratePatterns(5)
配列を返す必要があります
[patternNumber][summandNumber] = value
[0][0] = 5
[1][0] = 1
[1][1] = 1
[1][2] = 1
[1][3] = 1
[1][4] = 1
[2][0] = 3
[2][1] = 1
[2][2] = 1
[3][0] = 4
[3][1] = 1
私はすでにそこのようにこれをやろうとしています。与えられた数になる可能性のあるすべての合計を取得しますが、このhttp://introcs.cs.princeton.edu/java/23recursion/Partition.java のようにするのは非常に困難です。 html
解決
int n = 10;
int dimension = 0;
//First we need to count number of posible combinations to create a 2dimensionarray
for(List<Integer> sumt : new SumIterator(n)) {
if(!sumt.contains(2) && sumt.size() < 9) {
dimension++;
}
}
int[][] combinationPattern = new int[dimension][];
int foo = 0;
for(List<Integer> sum : new SumIterator(n)) {
if(!sum.contains(2) && sum.size() < 9) {
System.out.println(sum);
combinationPattern[foo] = toIntArray(sum);
foo++;
}
}
100%正しくは動作せず、非常にきれいですが、私のゲームには十分です
ここからSumIteratorクラスを使用しました。SumIterator.class古いバージョンではすべての組み合わせが返されないため(10の場合は[5,5]など)、このコードfor(int j = n-1; j > n/2; j--) {
をこれ
に変更する必要があります。for(int j = n-1; j >= n/2; j--) {
そして、toIntArray関数を使用しました。StackOverflowでうさぎを設立しましたが、リンクを忘れたので、ここにソースがあります:
public static int[] toIntArray(final Collection<Integer> data){
int[] result;
// null result for null input
if(data == null){
result = null;
// empty array for empty collection
} else if(data.isEmpty()){
result = new int[0];
} else{
final Collection<Integer> effective;
// if data contains null make defensive copy
// and remove null values
if(data.contains(null)){
effective = new ArrayList<Integer>(data);
while(effective.remove(null)){}
// otherwise use original collection
}else{
effective = data;
}
result = new int[effective.size()];
int offset = 0;
// store values
for(final Integer i : effective){
result[offset++] = i.intValue();
}
}
return result;
}