我要分析这段代码。这是平分方法。
哪些输入将导致进入第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;
}
}发布于 2020-03-18 23:07:59
如果您正在使用JUnit测试它,您可以使用重复测试并输入随机生成的值,因此到达这些行的概率很高。此外,设置行的调试器断点也很有用,这样您就可以看到到达这些行时的输入是什么。
但通过手动测试,我认为不可能在这种情况下结束,因为:
middle是de之间的中间情况( else情况) d需要大于else大小写似乎不允许,因为第一个if- middle (在本例中抛出了一个异常)如果e和d是相同的值(因此middle等于e,而不是smaler),这可能是可能的,但这也可能因为双精度而失败。
https://stackoverflow.com/questions/60741541
复制相似问题