Java - 类和对象,Set不起作用?

时间:2016-04-08 11:05:58

标签: java

我正在创建一个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) {

线。

有人可以解释为什么这不起作用,它似乎与教科书中的类似示例一起工作,但只是不适用于我的代码。

1 个答案:

答案 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。