[英]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.