2013-06-05 49 views
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]; 

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

+3

看倒数:为什么它会是有意义的定义空数组的索引? – Vulcan

+1

如何在数组中没有初始化的情况下访问数组中的某个特定项? – Bernard

+3

想想它的另一种方式就好像你正在填充一个杯子。如果你的杯子(阵列)不存在,你怎么可能为它添加水(int)?首先,你必须有一个明确的杯子,以加水。 – Vulcan

回答

1

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

+0

谢谢,那么我怎么能解决这个问题,当我不知道我的初始数组可以得到多大? – Amir

+0

@ user1972584您可以使用[Java in Collection](http://docs.oracle.com/javase/tutorial/collections/)。寻找名单 – Smit

+0

要么你或你必须读你的文件两次。一次获得大小,一次填入数组。当然,List可能是更好的选择(或ArrayList或Vector)。你可以在完成读取之后做List.ToArray。 –

1

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

内存大小不会变大(除非你使用列表或包含HashMap,...但它不是真的为通用阵列)

如果你不知道有多大的阵列将会,请考虑使用SparseIntArray。这就像列表一样,并且随着添加项目而变得越来越大。

+0

SparseIntArray仅在Android中可用,不是JavaSE的一部分 –

0

简而言之,在java中,一个数组是一个对象,因此您需要将它当作一个对象对待,并在对它做任何事情之前对其进行初始化。

0

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

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))); 
    } 

}