0

我正在编写代码,并且不断弹出以下消息:

Exception in thread "main" java.lang.NullPointerException
    at age.TokenizeNumbers.setYears(TokenizeNumbers.java:30)
    at age.AgeNo.main(AgeNo.java:18)

第30行的第一个让我很难过。我正在尝试用 array2[](日期)的内容填充 array1[](年),并且我只想要存储在 array2[] 中的数字的前两位。那个简单的 for() 循环有问题。只要我写 years=dates 它返回 array1[] (years) 就好了。一旦我尝试循环,我就会收到一个错误。这是代码。谢谢朱拉杰

package age;

import java.io.IOException;

public class TokenizeNumbers {
        int lines;
        long[] dates;
        long[] years;
        long[] dateNum;
        long[] convertedYears;
        long annum = 100000000;

    public TokenizeNumbers() throws IOException{
        String[] dates;
        String[] years;

        Vek v = new Vek("C:\\Users\\Juraj\\workspace\\Mackin\\src\\age\\rc.txt");
        lines = v.readLines();
        long[] dateNum = v.openFile();

    }

    public long[] getDateArray(long[] dateNum){
        dates = dateNum;
        return dates;
    }

    public long[] setYears(){
        for(int k = 0; k<dates.length; k++){    
        years[k]=dates[k]/annum;
        }
        return years;
    }


    public void printYears(){
        int y;

        for(y=0; y<lines; y++){
            System.out.println(years[y]);

        }
        System.out.println();
    }
}
4

3 回答 3

0

在这条线上:

years[k] = dates[k]/annum;

您正在尝试将值分配给years[k]但未years在提供的代码中初始化。你可以做

long[] years = new long[SIZE];

这同样适用于dateNum

你也有String数组dates,并且years在你的构造函数中TokenizeNumbers虽然没有使用可能会导致混乱。

查看Arrays#copyOf用于复制数组。

于 2013-03-26T17:16:00.340 回答
0

我认为问题出dates.length在您的代码中:

public long[] setYears(){
     for(int k = 0; k<dates.length; k++){    
        years[k]=dates[k]/annum;
     }
     return years;
}

您必须dates.length在设置(初始化)之前使用它。因此,当您执行时dates.length,它会说NPE,因此请确保dates在使用之前进行初始化。

于 2013-03-26T17:16:37.477 回答
0

日期[] 和年份[]

没有初始化,你需要用“new”关键字来初始化它们

于 2013-03-26T17:28:19.377 回答