我有这段代码需要分析。这就是二分法。
哪些输入将导致转到第 18 行和第 19 行的分支?
public class BiSectionExample {
public double root(double d, double e, double f) throws IllegalArgumentException {
double middle;
if (d >= e) {
System.out.println("1");
throw new IllegalArgumentException("low must be lower than high");
}
System.out.println(d + " " + e + " " + f);
while (e - d > f) {
System.out.println("2");
System.out.println("once");
middle = (e + d) / 2;
if (middle < e) {
System.out.println("3");
d = middle;
} else {
System.out.println("4"); // line 18
e = middle; // line 19
}
}
System.out.println((e + d) / 2);
return (e + d) / 2;
}
}
最佳答案
如果您使用 JUnit 来测试它,您可以使用重复测试并输入随机生成的值,因此到达线路的概率很高。此外,为这些行设置一个调试器断点也很有用,这样您就可以在到达这些行时看到输入的内容。
但是通过手动进行测试,我认为在这种情况下不可能结束,因为:
middle
是e
和d
之间的中间- 要使
middle
大于e
(else 情况),d
需要大于e
> - 由于第一个 if 子句(在这种情况下引发异常),这种情况似乎是不允许的
如果e
和d
是相同的值,这可能是可能的(因此middle
等于e
而且不是更小),但这也可能因为 double 而失败。
关于java - BiSection Java 测试输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60741541/