这是关于调试一个广义的答案。
我在代码中添加了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);
}
}
这里是结果。如你所见,你没有正确地计算斐波那契数列,所以你不能正确地计算偶数的总和。
首先,我们来修复斐波那契数列。您需要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的问题陈述即可。 –