これは、デバッグに関する一般的な答えです。
コードにprintlnステートメントを追加して、中間結果を確認しました。
実行可能コードは次のとおりです。
public class FibonacciTest {
public static void main(String[] args) {
long val1 = 1, val2 = 1, valEven = 2, total = 0;
while (val2 < 4000000 && val1 < 4000000) {
total += valEven; // only add even numbers to total
val1 += val2 + valEven;
val2 += val1 + valEven;
valEven += val1 + val2;
if (val1 < 1000L)
System.out.println(val1 + " " + val2 + " " + valEven);
}
System.out.println(total);
}
}
結果は以下のとおりです。
4 7 13
24 44 81
149 274 504
927 1705 3136
5600910
ご覧のとおり、フィボナッチシーケンスは正しく計算されていないため、偶数の合計を適切に計算していません。
まず、フィボナッチシーケンスを修正しましょう。フィボナッチシーケンスを正しく計算するには3つの値が必要です。長い定数に "L"を追加しましょう。
public class FibonacciTest {
public static void main(String[] args) {
long val1 = 1, val2 = 2, val3 = 2, total = 0;
while (val1 < 4_000_000L) {
if (val1 < 1000L) {
System.out.println(val1 + " " + val2 + " " + val3);
}
val3 = val1 + val2;
val1 = val2;
val2 = val3;
}
System.out.println(total);
}
}
ここには最初のいくつかの結果があります。
1 2 2
2 3 3
3 5 5
5 8 8
8 13 13
13 21 21
21 34 34
34 55 55
55 89 89
89 144 144
フィボナッチシーケンスが正しく生成されたので、偶数値を加算しましょう。
public class FibonacciTest {
public static void main(String[] args) {
long val1 = 1L, val2 = 2L, val3 = 2L, total = 0L;
while (val1 < 4_000_000L) {
val3 = val1 + val2;
val1 = val2;
val2 = val3;
if (val1 % 2L == 0L) {
System.out.println(val1);
total += val1;
}
}
System.out.println(total);
}
}
ここに結果があります。
2
8
34
144
610
2584
10946
46368
196418
832040
3524578
4613732
合計は4613732です。
これでは問題を診断するには不十分です。あなたは、期待される(正しい)答えと実際に得られる答えを提示しなければなりません。質問を編集して追加してください。 –
問題に詳しい説明を追加する必要があります。オイラー問題2の問題文を貼り付けてください。 –