空指针错误数组缩短方法

时间:2013-04-14 12:32:30

标签: java exception pointers null

我有以下代码,它应该通过将元素复制到新数组并同时擦除每个数组来缩短数组。但是,我仍然保持一个空指针异常错误。

public void shorten()
{
    // put your code here
    if( samples.length % 2 == 0){
        double [] temp = new double[samples.length / 2];
    }
    else if( samples.length % 2 != 0){
        double [] temp = new double[samples.length / 2 - 1];
    }

    Arrays.fill(temp, 1.0);
    int j = 0;
    for(int i=0; i<= temp.length; i++){
        temp[i] = samples[j];

        j = j + 2;

    }
    samples = temp;
}

3 个答案:

答案 0 :(得分:3)

此代码的每个块:

if( samples.length % 2 == 0){
    double [] temp = new double[samples.length / 2];
}
else if( samples.length % 2 != 0){
    double [] temp = new double[samples.length / 2 - 1];
}

定义一个temp变量,只有一行范围(隐藏temp类变量(我认为你已经拥有)用于这些行并保持不变)。

如果在调用函数时temp类变量为null,则在这些行之后它仍然是null。你需要这样的东西:

if( samples.length % 2 == 0){
    temp = new double[samples.length / 2];
}
else { // samples.length % 2 != 0 is implied, since it's else
    temp = new double[samples.length / 2 + 1]; // corrected -1 to +1
}

我在宣布新变量的double[]之前删除了temp

此外,for循环检查需要i < temp.length,而不是<=,因为在后一种情况下它也将运行i = temp.length的循环,因此尝试编写{ {1}},并且,由于0索引,此索引超出范围。

答案 1 :(得分:1)

除了Null Pointer之外,这是另一个错误。

i<= temp.length应为i< temp.lengthlength给出总长度,因为元素计数从0开始,数组的最后一个元素是length-1

答案 2 :(得分:0)

试试这个:我在需要的地方更改了代码。

public void shorten()
{
    // put your code here
    double [] temp=null; // here I declare temp Array
    if( samples.length % 2 == 0){
        temp = new double[samples.length / 2];
    }
    else if( samples.length % 2 != 0){
         temp = new double[samples.length / 2 - 1];
    }

    Arrays.fill(temp, 1.0);
    int j = 0;
    for(int i=0; i< temp.length; i++){// here I removed "=" because Array index starts from 0 to length-1. 
        temp[i] = samples[j];

        j = j + 2;

    }
    samples = temp;
}