当我无法初始化为null时,如何初始化我的数组?

时间:2013-06-05 19:35:55

标签: java arrays nullpointerexception

我有一个字符串数组,我想转换为int,这里的代码非常简单明了:

public static void main(String[] args) {
    String myarray[]=readfile("[pathtothefile]");

     int mynums[] = new int[myarray.length];
    for (int i=0;i<myarray.length;i++){
        mynums[i]=Integer.parseInt(myarray[i]);
    }
    System.out.print(Arrays.toString(mynums));  
}

但问题在于,如果我像这样初始化“mynums”: mynums [] = null; 我在下一行中得到 NullPointerException

"mynums[i]=Integer.parseInt(myarray[i]);" 

我需要做的就是解决它

int mynums[] = new int[myarray.length]; 

here有人解释了为什么会发生,但我现在不知道如何初始化!我的意思是有时我不知道我的数组有多大,我只是想初始化它。它甚至可能吗?

5 个答案:

答案 0 :(得分:1)

在Java中,一切都是幕后的指针。所以当你做mynums [] = null时,你指向一个null。什么是null [i]?这就是你的NPE来自哪里。或者,当您将其指向数组时,您实际上正在访问数组的第i个元素。

答案 1 :(得分:1)

您必须首先初始化数组,因为它根据数组大小分配内存。当您想要将一个整数添加到数组时,它会将int写入先前分配的内存中。

随着你添加更多项目,内存大小不会变大。(除非你使用Lists或Hashmaps,......但是通用数组不是这样)

如果您不知道阵列的大小,请考虑使用SparseIntArray。这就像列表一样,并且在添加项目时会变得更大。

答案 2 :(得分:0)

简单地说,在java中,数组是一个对象,因此你需要像对象一样对待它并在用它做任何事情之前对它进行初始化。

答案 3 :(得分:0)

如果不使用数组但使用ArrayList怎么办?它会在您添加元素时动态增长。

答案 4 :(得分:0)

这是一个想法。当您将某些内容初始化为null时,您只是声明它存在。例如...如果我告诉你有一只狗,但我没告诉你任何事情......我没告诉你它在哪里,它有多高,多大了,男/女等等。我告诉过你没有它的属性或如何访问它,我告诉你的只是有一只狗(其名称是数组,为了争论),那就是你所知道的。有一只名叫Array的狗,就是它。

通常,当已知大小时使用数组,并且通常数据是不可变的。对于要更改的数据,您应该使用ArrayList之类的东西。这些意图随意更改;你可以随心所欲地添加/删除元素。有关ArrayList的更多信息,请阅读上面发布的链接。

现在,至于你的代码:

public static void main(String[] args) {

    ArrayList<int> myInts = new ArrayList<int>();
      // define a new null arraylist of integers.

    // I'm going to assume that readfile() is a way for you get the file
    // into myarray. I'm not quite sure why you would need the [], but I'll
    // leave it.

    String myarray[] = readfile("[pathtothefile]");

    for (int i = 0; i < myarray.length; i++) {
             //adds the value you've specifed as an integer to the arraylist.
        myInts.add(Integer.parseInt(myarray[i])); 
 }

    for (int i = 0; i < myInts.size(); i++) {
            //print the integers
        System.out.print(Integer.toString(myInts.get(i)));
    }

}