1

次の繰り返しのコードをどのように記述できるかわかりません。

[a, b] --> [a, a*2/3, a*1/3+b*2/3, b];

[a, b, c] --> [a, a*2/3, a*1/3+b*2/3, b, b*2/3+ c/3, b/3+c*2/3, c]

それだけで、リストを取り、例のように展開します。そのためのコードをどのように記述できるかわかりません。誰かがそれを手伝ってくれませんか?

4

3 に答える 3

2

非常に簡単です。入力としてリストを受け取り、出力としてリストを生成します。

public static <T extends Number> List<Double> expandThirds(List<T> input) {
    List<Double> output = new ArrayList<Double>();

    if(input.size() == 0)
        return output;

    output.add(input.get(0).doubleValue());

    for(int i=0; i<input.size()-1; i++) {
        double a = input.get(i).doubleValue();
        double b = input.get(i+1).doubleValue();
        output.add(a*2/3 + b/3);
        output.add(a*3 + b*2/3);
        output.add(b);
    }
    return output;
}
于 2012-10-22T04:32:12.030 に答える
1

次のように書けると思います。

double[] inputArray = new double[]{0.56,2.4,3.6};//pass you input array of size>1
List<Double> outList = new ArrayList<Double>();
//assuming minimum length of array = 2
for (int i=0; i<inputArray.length-1;i++){
    permute(inputArray[i], inputArray[i+1], outList);
}
System.out.println(outList);

generateRecurrance以下のプライベートカスタムメソッドはどこにありますか:

private void generateRecurrance(double a, double b, List<Double> outList) {
    outList.add(a);
    outList.add(a*1/3+b*2/3);
    outList.add(a*2/3+b*1/3);
    outList.add(b);
}
于 2012-10-22T04:12:33.257 に答える
0

最初のケースを処理する関数を作成し、それを呼び出しますmySequenceHelper。ここには書きませんが、次のケースを処理する必要があります。

[a, b] --> [a*2/3+b/3, a*1/3+b*2/3, b];

次に、 という関数を作成mySequenceし、数値の各ペアを に渡しmySequenceHelper、結果の各セットをマスター リストに追加します。これはJavaでの簡単なものです:

public List<Float> mySequence(List<Float> inputs) {
    List<Float> toReturn = new LinkedList<Float>();

    // Add the first term manually:
    toReturn.add(inputs.get(0));

    // For each pair of values in inputs, add the appropriate 3 terms
    for (int i = 0; i < inputs.size() - 1; i++) {
        toReturn.addAll(mySequenceHelper(inputs.get(i), inputs.get(i+1)));
    }

    return toReturn;
}
于 2012-10-22T04:06:51.540 に答える