如何计算斐波那契数列

时间:2019-04-16 00:09:32

标签: java math

我写了下面的代码,该代码执行斐波那契数列,我遇到的问题是,当对我的JUnit Test代码运行它时,仅解决了一个问题。我将在下面显示给您。

这是我的代码。

import java.util.ArrayList;

public class ResitCode {

public int Fib_No(int position) {
    position = 10;
    ArrayList<Integer> a = new ArrayList<Integer>();
    a.add(0);
    a.add(1);
      System.out.println(position); 
    for (int i = 1; i <= position; ++i) {

        System.out.println(a.get(0) + " ");
        int sumofBoth = a.get(0) + a.get(1);
        int a1 = a.get(0);
        int a2 = a.get(1);
        a1 = a2;
        a2 = sumofBoth;


    }

    return 0 ;

}

现在这是我的单元测试代码

import static org.junit.jupiter.api.Assertions.*;


import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

class ResitCodeTest {


public static ResitCode test;

@BeforeAll
static void setUpBeforeClass() throws Exception {
    test = new ResitCode();
}

@ParameterizedTest
@DisplayName("Testing Fib_No")
@CsvSource({
                "1,0",
                "2,1",
                "3,1",
                "4,2",
                "8,13",
                "14,233"                   
})
void testFib_No(int pos, int fibno) {
    assertEquals(fibno,test.Fib_No(pos));
}

当我针对此问题运行它时,只有一个问题得以解决,如果有人可以告诉我我做错了什么以及如何使它通过所有测试,将不胜感激。 JUNIT FAILURE

2 个答案:

答案 0 :(得分:0)

我认为您必须这样做。你的循环什么都不做

int a = 0, b=1, c;
      System.out.println(position); 
    for (int i = 1; i <= position; ++i) {
       System.out.println(a + " ");
       c=a+b;
       a=b;
       b=c;
    }

答案 1 :(得分:0)

Fib_No函数中有两个错误:

1)您不返回结果。将return 0替换为return a.get(1)

2)在for循环中,您正在使用临时变量,而不是引用。因此,在循环内部完成的分配无效。要替换以前的值,请使用:

    int sumofBoth = a.get(0) + a.get(1);
    a.set(0,a.get(1));
    a.set(1,sumofBoth);

注意:由于您仅使用两个整数,因此使用列表结构会使代码变慢且难以阅读。考虑使用两个变量int a=0; int b=1;