我写了下面的代码,该代码执行斐波那契数列,我遇到的问题是,当对我的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
答案 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;
。