Java 根据“寻找答案”;斐波那契序列;

Java 根据“寻找答案”;斐波那契序列;,java,math,arraylist,fibonacci,Java,Math,Arraylist,Fibonacci,请看一下下面的代码 package Euler; import java.util.ArrayList; import java.util.List; public class Problem2 { public static void main(String[]args) { int firstNumber=1; int secondNumber=2; int thirdNumber = 0; int sum

请看一下下面的代码

package Euler;

import java.util.ArrayList;
import java.util.List;

public class Problem2
{
    public static void main(String[]args)
    {
        int firstNumber=1;
        int secondNumber=2;
        int thirdNumber = 0;

        int sum = 0;

        List array = new ArrayList();

        while(true)
        {

            if(thirdNumber>=400000)
            {
                break;
            }
            else
            {
                thirdNumber = firstNumber+secondNumber;
                System.out.println(thirdNumber);


                 if(thirdNumber%2==0)
                {
                    array.add(thirdNumber);
                }

                firstNumber = secondNumber;
                secondNumber = thirdNumber;
            }
        }

        for( int i=0;i<array.size();i++)
        {
            int num = Integer.parseInt(array.get(i).toString());

            sum = sum+num;
        }

        System.out.println("The Sum is: "+sum);
    }
}
package;
导入java.util.ArrayList;
导入java.util.List;
公共类问题2
{
公共静态void main(字符串[]args)
{
int firstNumber=1;
int secondNumber=2;
int thirdNumber=0;
整数和=0;
列表数组=新的ArrayList();
while(true)
{
如果(第三个编号>=400000)
{
打破
}
其他的
{
第三个数字=第一个数字+第二个数字;
系统输出打印号(第三个编号);
如果(第三个数字%2==0)
{
array.add(第三个数字);
}
firstNumber=secondNumber;
第二个数字=第三个数字;
}
}
对于(int i=0;i)问题,从项目Euler来看,这里是问题所在

斐波那契序列中的每个新项都是通过添加 前两个学期。从1和2开始,前10个学期将 是:

1、2、3、5、8、13、21、34、55、89

通过考虑Fibonacci序列中的项,其值不 超过四百万,求偶数项之和

这就是我得到的答案——257112

它说答案是错的。我不知道为什么。我的母语不是英语,我也没有用英语做数学。所以我怀疑我是否误解了这个问题

请帮我找到解决这个问题的正确方法。谢谢

通过考虑斐波那契序列中的项,其值不超过400万

这里有一个问题:

if(thirdNumber>=400000)

那不是四百万。你还需要一个零。

你可以通过

  • 计算斐波那契数时计算和(因此不必存储它们)
  • 如果确实使用了集合,请使用泛型,而不是转换为字符串并对其进行解析(这效率非常低)
  • 请注意,每三个值都是偶数,因此不需要检查偶数
试一试

长a=1,b=1,c,和=0;
而((c=a+b)<4000000){
总和+=c;
a=b+c;
b=c+a;
}
系统输出打印项数(总和);

@nhahtdh不,序列中没有多少项小于400万。与
int
配合使用很好。这是一个project Euler问题,因此人们应该避免提供解决方案。正确答案是sum=4613732。在担心求和之前,你应该确保Fibonnaci数正确。看看你是否可以c创建一个值列表并将其设置正确。感谢您的回复。其他内容都是正确的吗?我的意思是,我是否遵循了正确的数学方法?@user1484871:我快速浏览了一下,它看起来不错,但这一行有点…错误…不必要:
int num=Integer.parseInt(array.get(I).toString())
为什么都要转换为字符串,然后将其解析回int?开始时它已经是一个
整数了。只需调用
intValue
。然后使用一个通用列表,这样就不需要强制转换。此外,您还可以一边计算和,而不是将整数存储在列表中,然后在最后求和。此时不需要该列表好的。你似乎也没有把
2
这个词包括在总数中。你在数组中添加的第一个词似乎是
8
。太棒了!非常感谢你的帮助!
long a = 1, b = 1, c, sum = 0;
while ((c = a + b) < 4000000) {
    sum += c;
    a = b + c;
    b = c + a;
}
System.out.println(sum);