簡體   English   中英

如何計算斐波那契數列

[英]How to compute Fibonacci sequence

我在下面編寫了執行斐波那契數列的代碼,我遇到的問題是,當我針對 JUnit 測試代碼運行它時,只解決了一個問題。 下面我給大家介紹一下。

這是我的代碼。

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 故障

我想你必須這樣做。 你的循環什么都不做

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;
    }

Fib_No函數有兩個錯誤:

1)你不返回結果。 return a.get(1)替換return 0

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; int a=0; int b=1; .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM