我正在创建一个QuarterResult
类,基本上我遇到了setResult
方法的问题(这不是整个代码,而是我的问题所需的代码)。
public class QuarterResult {
private double[] results;
public QuarterResults() {
results = new double[4];
}
/**
* Set the results at index i to the result passed as the parameter
* @param index (return if OOB)
* @param result
*/
public void setResult(int index, double result) {
if (index <= 0 || index >= results.length) {
return;
}
else {
for (int i = index; i < results.length; i++) {
results[index] = result;
}
}
}
测试代码:
myResult.setResult(0, 25.1);
assertEquals(25.1, myResult.getMark(0), 0.01);
错误:java.lang.AssertionError:expected:&lt; 25.1&gt;但是:&lt; 0.0&gt;
现在当我改变代码时,建议说。我现在得到一个例外:
显示java.lang.NullPointerException
at xxxx.QuarterResult.setResult(QuarterResult.java:25)
这是
if (index <= 0 || index >= results.length) {
线。
有人可以解释为什么这不起作用,它似乎与教科书中的类似示例一起工作,但只是不适用于我的代码。
答案 0 :(得分:5)
if(index<= 0 ...
- 你传递的0没有任何反应。我猜您的意思是if( index < 0 ...
。
除此之外,我不只是在这种情况下结束方法,而是抛出异常,例如IllegalArgumentException
,否则您可能会错过错误的参数(正如您显然那样)。
另请查看此代码:
for (int i = index; i < results.length; i++) {
results[index] = result;
}
循环真的有必要吗? (提示:不)
从您的评论:“仍然不确定我的答案有什么问题”
我假设你的意思是为什么你得到断言错误。由于代码中的错误results[0]
从未设置,因此仍然具有初始化的值,double
变量或double[]
数组的元素为0.0。