1

我有一个字符串数组,我想将其转换为 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]; 

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

4

5 回答 5

1

在 Java 中,一切都是幕后的指针。因此,当您执行 mynums[]=null 时,您指向的是一个空值。那么什么是 null[i]?这就是您的 NPE 的来源。或者,当您将其指向一个数组时,您实际上是在访问数组的第 i 个元素。

于 2013-06-05T19:39:05.030 回答
1

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

当您添加更多项目时,内存大小不会变大。(除非您使用列表或哈希图,...但对于通用数组而言并非如此)

如果您不知道您的阵列有多大,请考虑使用SparseIntArray. 这就像列表,并且会随着您添加项目而变大。

于 2013-06-05T19:43:41.543 回答
0

这是一个想法。当您将某些内容初始化为 null 时,您只是在声明它存在。例如......如果我告诉你有一只狗,但我什么也没告诉你......我没有告诉你它在哪里,它有多高,几岁,男性/女性等...... . 我没有告诉你它的任何属性或如何访问它,我只告诉你有一只狗(为了争论,它的名字是 Array),那么这就是你所知道的一切。有一只狗,它的名字叫 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)));
    }

}
于 2013-06-05T20:06:35.700 回答
0

简而言之,在 java 中,数组是一个对象,因此您需要将其视为对象并在对其进行任何操作之前对其进行初始化。

于 2013-06-05T19:45:15.043 回答
0

如果您不使用数组而是使用 ArrayList 怎么办?它会随着您添加元素而动态增长。

于 2013-06-05T20:00:54.807 回答