Euler项目,问题2-Java

Euler项目,问题2-Java,java,Java,我是一个相对较新的java程序员,一天中的大部分时间我都在修补这个程序,但我仍然被卡住了;我希望你能帮我 因此,该计划应满足以下要求: 斐波那契方程中的每个新项 序列是通过添加 前两届。从1开始 第二,前10个条款为: 1、2、3、5、8、13、21、34、55、89 通过考虑 其值不为零的斐波那契序列 超过四百万,找到 偶数值项 这是我的代码: //Generates Fibonacci sequence while (fibNum < 144) {

我是一个相对较新的java程序员,一天中的大部分时间我都在修补这个程序,但我仍然被卡住了;我希望你能帮我

因此,该计划应满足以下要求:

斐波那契方程中的每个新项 序列是通过添加 前两届。从1开始 第二,前10个条款为:

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

通过考虑 其值不为零的斐波那契序列 超过四百万,找到 偶数值项

这是我的代码:

    //Generates Fibonacci sequence
    while (fibNum < 144)
    {
        int lastValue = (Integer) fibList.get(fibList.size()-1);
        int secondToLastValue = (Integer) fibList.get(fibList.size()-2);

        fibNum = secondToLastValue + lastValue;

        if (fibNum < 144)
        {
            fibList.add(fibNum);
        }

    //Picks out the even numbers from limitFibList
    for (int i = 0; i < fibList.size(); i++)
    {
        if ((Integer) fibList.get(i) % 2 == 0)
        {
            evenNumsFibList.add(fibList.get(i));
        }
    }

    //Sums up the total value of the numbers in the evenNumsFibList
    for (int i = 0; i < evenNumsFibList.size(); i++)
    {
        sum += (Integer) evenNumsFibList.get(i); 
    }
显然,我的while循环导致了我的问题,但我不知道如何修复它

非常感谢您的帮助


Haque

看起来您缺少
while
循环中的右括号。因此的另一个
在其中运行

因此:

while(fibNum<144)
{
int lastValue=(整数)fibList.get(fibList.size()-1);
int secondToLastValue=(整数)fibList.get(fibList.size()-2);
fibNum=secondToLastValue+lastValue;
如果(fibNum<144)
{
fibList.add(fibNum);
}
}
//从列表中选择偶数
对于(int i=0;i
看起来您在
循环时缺少了
上的右括号。因此,
的其他
在循环中运行

因此:

while(fibNum<144)
{
int lastValue=(整数)fibList.get(fibList.size()-1);
int secondToLastValue=(整数)fibList.get(fibList.size()-2);
fibNum=secondToLastValue+lastValue;
如果(fibNum<144)
{
fibList.add(fibNum);
}
}
//从列表中选择偶数
对于(int i=0;i
问题在于:

for (int i = 0; i < fibList.size(); i++)
{
    if ((Integer) fibList.get(i) % 2 == 0)
    {
        evenNumsFibList.add(fibList.get(i)); <-- HERE
    }
}
for(int i=0;i
for (int i = 0; i < fibList.size(); i++)
{
    if ((Integer) fibList.get(i) % 2 == 0)
    {
        evenNumsFibList.add(fibList.get(i)); <-- HERE
    }
}
for(int i=0;ievenNumsFibList.add(fibList.get(i));我遗漏了什么吗?你为什么需要创建列表?你只需要一个偶数的和?对吗?如果我理解正确,你可以在10行代码中得到和…我没有Java IDE opend,所以我会给你Pythone代码。如果你需要的话,我会把它转换成Java

def fib(n=4000001):    # write Fibonacci series up to n
    r = 0
    a, b = 0, 1
    while b < n:
        if not b%2 :
            print(b, end=' ')
            r += b
        a, b = b, a+b
    return r

OUTPUT:
2 8 34 144 610 2584 10946 46368 196418 832040 3524578 
sum = 4613732
def fib(n=4000001):#将Fibonacci级数写到n
r=0
a、 b=0,1
而b
我遗漏了什么吗?为什么需要创建列表?你只需要一个偶数的和?对吗?如果我理解正确,你可以在10行代码中得到和…我没有Java IDE opend,所以我会给你Pythone代码。如果这是你需要的,我会把它转换成Java

def fib(n=4000001):    # write Fibonacci series up to n
    r = 0
    a, b = 0, 1
    while b < n:
        if not b%2 :
            print(b, end=' ')
            r += b
        a, b = b, a+b
    return r

OUTPUT:
2 8 34 144 610 2584 10946 46368 196418 832040 3524578 
sum = 4613732
def fib(n=4000001):#将Fibonacci级数写到n
r=0
a、 b=0,1
而b
如果仔细查看实际需要的斐波那契序列中的数字(只有偶数需要求和),您将看到一种模式:

0  1  1  2  3  5  8  13  21  34  55  89  144 ...
-  O  O  E  O  O  E   O   O   E   O   O    E
请注意,从0开始的每三个数字都是偶数。因此,如果计算每三个斐波那契数,则可以消除对均匀性的任何检查。再次查看序列,您可以看到如果
k
是您正在查看的当前偶数斐波那契数,
j
是前一个,下一个偶数斐波那契数分子量
n
可通过以下方式获得:

n = 4k + j
因此,在Java中,您可以尝试以下内容:

int j = 0;
int k = 2;
int sum = j+k;

while (k < LIMIT) {
    int tmp = 4*k + j;
    sum = sum + tmp;
    j = k;
    k = tmp;
}
intj=0;
int k=2;
整数和=j+k;
while(k
如果仔细查看实际需要的斐波那契序列中的数字(只有偶数需要求和),您将看到一种模式:

0  1  1  2  3  5  8  13  21  34  55  89  144 ...
-  O  O  E  O  O  E   O   O   E   O   O    E
请注意,从0开始的每三个数字都是偶数。因此,如果计算每三个斐波那契数,则可以消除对均匀性的任何检查。再次查看序列,您可以看到如果
k
是您正在查看的当前偶数斐波那契数,
j
是前一个,下一个偶数斐波那契数分子量
n
可通过以下方式获得:

n = 4k + j
因此,在Java中,您可以尝试以下内容:

int j = 0;
int k = 2;
int sum = j+k;

while (k < LIMIT) {
    int tmp = 4*k + j;
    sum = sum + tmp;
    j = k;
    k = tmp;
}
intj=0;
int k=2;
整数和=j+k;
while(k
公共类Euler002{

int counter = 0;

public int getCounter () {
    return counter;
}

public int getFibTotal () {
    final int UPPER_LIMIT = 4000000; 
    int fib1 = 0;
    int fib2 = 1;
    int newFib = fib1 + fib2;
    int total = 0; 

    while (newFib < UPPER_LIMIT) {
        counter++;
        fib1 = fib2;
        fib2 = newFib;
        newFib = fib1 + fib2;
        if ((newFib % 2) == 0) {
            total += newFib;
        }
    }
    return total;
}

/**
 * @param args
 */
public static void main(String[] args) {
    Euler002 euler002 = new Euler002();
    int total = euler002.getFibTotal();
    System.out.println(" Counter = " + euler002.getCounter() + " And Fib Total is " + total);
}
int计数器=0;
公共int getCounter(){
返回计数器;
}
公共整数getFibTotal(){
最终整数上限=4000000;
int fib1=0;
int fib2=1;
int newFib=fib1+fib2;
int-total=0;
while(newFib<上限){
计数器++;
fib1=fib2;
fib2=newFib;
newFib=fib1+fib2;
如果((newFib%2)==0){
总+=新纤维蛋白;
}
}
返回总数;
}
/**
*@param args
*/
公共静态void main(字符串[]args){
Euler002 Euler002=新的Euler002();
int-total=euler002.getFibTotal();
System.out.println(“Counter=“+euler002.getCounter()+”和Fib总计为“+Total”);
}

}公共类Euler002{

int counter = 0;

public int getCounter () {
    return counter;
}

public int getFibTotal () {
    final int UPPER_LIMIT = 4000000; 
    int fib1 = 0;
    int fib2 = 1;
    int newFib = fib1 + fib2;
    int total = 0; 

    while (newFib < UPPER_LIMIT) {
        counter++;
        fib1 = fib2;
        fib2 = newFib;
        newFib = fib1 + fib2;
        if ((newFib % 2) == 0) {
            total += newFib;
        }
    }
    return total;
}

/**
 * @param args
 */
public static void main(String[] args) {
    Euler002 euler002 = new Euler002();
    int total = euler002.getFibTotal();
    System.out.println(" Counter = " + euler002.getCounter() + " And Fib Total is " + total);
}
int计数器=0;
公共int getCounter(){
返回计数器;
}
公共整数getFibTotal(){
最终整数上限=4000000;
int fib1=0;
int fib2=1;
int newFib=fib1+fib2;
int-total=0;
while(newFib