1

数学表記で書かれた次の 2 つの関数を Java コードに書き写すのに苦労しています (両方の関数の入力は D 要素を持つ配列です)。

ここに画像の説明を入力

誰かが以下のコードを見て、何か問題があるかどうか教えてもらえますか?

public double firstFunction(double[] arrayOfElements) {

double sum = 0;
double sumTwo = 0;

for(int i = 0; i < arrayOfElements.length; i++) {
    for(int j = 0; j < i; j++){
        sumTwo = sumTwo + arrayOfElements[j];
    }
    sum = sum + Math.pow(sumTwo, 2);
    }
    return sum;
}

public double secondFunction(double[] arrayOfElements) {
    double maximum = Math.abs(arrayOfElements[0]);
    for (int i = 0; i < arrayOfElements.length; i++) {
        if (Math.abs(arrayOfElements[i]) > maximum) {
            maximum = Math.abs(arrayOfElements[i]); 
        }
    }
    return maximum;
}
4

1 に答える 1

1

最初のメソッドはsumTwo、反復ごとにゼロにリセットする必要があります。現在、外側のループの 1 つの実行から次の実行までの値を累積します。それ以外の場合は問題ありません。

あるいは、より効率的に、ある反復と次の反復の違いがsumTwo新しい配列要素であることに気付くことができます。これは、内側のループが必要ないことを意味します。

for(int i = 0; i < arrayOfElements.length; i++) {
    sumTwo = sumTwo + arrayOfElements[j];
    sum = sum + Math.pow(sumTwo, 2);
}

2 番目のメソッドは、要素自体ではなく、絶対値が最大の要素のインデックスを返すことになっています。max のサブインデックスiに注意してください。

于 2013-05-31T16:29:13.423 に答える