【问题标题】:how can i initialize my array when i cant initialize as null?当我无法初始化为空时如何初始化我的数组?
【发布时间】:2013-06-01 15:36:18
【问题描述】:

我有一个字符串数组,我想将其转换为 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 有人解释了为什么会发生,但我现在不知道如何初始化!我的意思是有时我不知道我的数组可以有多大,我只想初始化它。有可能吗?

【问题讨论】:

  • 反过来看:为什么定义空数组的索引有意义?
  • 如何在数组本身没有初始化的情况下访问数组中的特定项?
  • 另一种思考方式就像你在灌一杯。如果您的杯子(数组)不存在,您怎么可能向其中添加水(整数)?首先,你必须有一个确定的杯子才能加水。
  • 当你说 int mynums[] = null 时,你声明了一个变量,它可以引用一个整数值数组,但此时你说它什么都没有所以如果它什么都没有, 那么表达式 mynums[i] 没有意义。
  • “我的意思是有时我不知道我的数组能有多大,我只想初始化它。这可能吗” java.util.ArrayList

标签: java arrays nullpointerexception


【解决方案1】:

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

【讨论】:

  • 谢谢,那么当我不知道我的初始数组有多大时,我该如何解决这个问题?
  • @user1972584 你可以使用Collection in java。寻找列表
  • 要么,要么你必须阅读你的文件两次。一次获取大小,一次填充数组。当然 List 可能是更好的选择(或 ArrayList 或 Vector)。读完后也可以做List.ToArray。
  • @Smit 我在某处看到 ADT 建议我将 SparseIntArray 用于整数。
  • @MiroMarkarian 是的,但那是 ADT 的。这家伙只想要一些基本的东西。 SparseIntArray 是一个很大的优化工具,不是常规 Java 库的一部分,仅在 android 库中。
【解决方案2】:

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

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

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

【讨论】:

  • SparseIntArray 仅在 Android 中可用,不是 JavaSE 的一部分
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    这是一个想法。当您将某些内容初始化为 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)));
        }
    
    }
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-24
        • 2012-06-22
        • 1970-01-01
        相关资源
        最近更新 更多