如何打印方法中定义的变量?

时间:2015-07-11 10:03:43

标签: java eclipse scope

public class Program {

    public static void main(String[] args) {
        int lastFibo = 1;  // ADDED TO check if last fib calculated is over 4000000
        for (int i = 3; lastFibo <= 4000000; i = i + (i - 1)) {
            lastFibo = fibo(i);
        }
    }

    public static int fibo(int i) {
        int total = 0;
        if (i % 2 == 0) {
            total += i;
            return total;
        }
        return total;
    }
}

此代码的目的是打印斐波那契序列中偶数的总和,其值小于4百万。使用递归,代码返回堆栈溢出错误,因此建议迭代数字。遇到的困难是知道如何打印“总”变量。范围文章非常基础,并创建static int total = 0 return 0

3 个答案:

答案 0 :(得分:2)

注意:问题的第一部分与误解有关。我认为有必要计算到fib(4000000)

您必须使用BigInteger,否则您无法处理如此大的数字。这是一个有数千位数的数字! fib(4000000)导致数字超过835k。无法使用intlong处理此问题。 类BigInteger(或十进制值的等效BigDecimal)可以处理此类问题。

注意:这是问题的答案

现在问题更清楚了,可以给出正确答案。

public void printEvenFib() {
    int i = 1;
    int lastFib = 1;
    int sum = 0;
    while (lastFib <= 4000000) {
        if (lastFib % 2 == 0) {
            sum += lastFib;
        }
        i++;
        lastFib = fib(i);
    }
    System.out.println(sum);
}

 // Without recursion
 public int fib(int n) {
     if (n <= 2) {
         return 1;
     }
     int fibo1 = 1;
     int fibo2 = 1;
     int fibo = 0;
     for (int i = 3; i <= n; i++) {
         fibo = fibo1 + fibo2;
         fibo2 = fibo1;
         fibo1 = fibo;
     }
     return fibo;
 }          

答案 1 :(得分:2)

首先,正如一些评论所指出的那样:你的for循环不会迭代Fibonacci序列。其次,变量total仅存在于fibo方法的范围内。因此,每次调用该方法时,total都会以值0开头。

使用正确的Fibonacci算法并添加fibo方法的返回值以计算总和:

public class Program {

    public static void main(String[] args) {
        int total = 0;
        int previousValue = 0;
        int currentValue = 1;
        while (currentValue < 4_000_000) {
            int nextPreviousValue = currentValue;
            currentValue += previousValue;
            previousValue = nextPreviousValue;
            total += fibo(currentValue);
        }
        System.out.println(total);
    }

    public static int fibo(int i) {
        if (i % 2 == 0) {
            return i;
        }
        return 0;
    }
}

4_000_000是一个整数文字,你可以使用Java 7以来的数字4000000.下划线的目的是使它对人类更好的可读性。以编程方式使用4000000没有区别。有关详细信息,请参阅The Java Tutorials中的Primitive Data Types

答案 2 :(得分:1)

class Program2{
public static void main(String args[]){
     int n1=0,n2=1,n3,total=0,i;
     for(i=1;n3<4000000;++i){ 
        n3=n1+n2;
        if(n3%2==0)
            total+=n3;
        n1=n2;    
        n2=n3;    
    } 
    System.out.println("total is "+total);  
}

}