【问题标题】:How to fill an array in a class JAVA如何在 JAVA 类中填充数组
【发布时间】:2014-10-22 07:49:21
【问题描述】:

所以我在尝试创建的程序时遇到问题。我无法在没有错误的情况下将数据放入数组int[] serviceCode

Exception in thread "main" java.lang.NullPointerException
    at Job_18028094.<init>(Job_18028094.java:24)
    at BMAS_Main_18028094.main(BMAS_Main_18028094.java:76)

这是我的代码的相关部分。

从我的主目录:

String[] tempRecords = fileScan.nextLine().split(",");
jobList[loopCount] = new Job_18028094(tempRecords);

来自我的班级“工作”:

private int[] serviceCode;

public Job_18028094(String[] tempRecords) {
    serviceCode[0] = Integer.parseInt(tempRecords[6]);
}

为了澄清问题,tempRecords[6] 中保存的数据为String(但都是数字),并且在转换它们之前一直使用Integer#parseInt。我研究了错误的含义并发现它意味着该变量是一个“空”值,但我不确定如何更改它或只是用 tempRecords 中的数据覆盖它。

提前感谢您的帮助:)

【问题讨论】:

  • 你从未初始化过 serviceCode
  • 你想在你的构造函数中做什么?在您所写的内容中,您试图将 tempRecords 的第 7 个元素放在 serviceCode 的第一个单元格中(该单元格尚不存在,因为整个数组尚未初始化)。

标签: java arrays nullpointerexception


【解决方案1】:

NullPointerException 被抛出,因为 ServiceCode 数组没有被初始化。数组是静态对象,需要在任何使用之前进行初始化。此外,您应该在使用它之前提供这个数组的大小!尝试将“大小”参数传递给 Job_18028094 构造函数。这样就可以解决问题了。

【讨论】:

    【解决方案2】:

    你必须在使用它之前初始化这个array

     private int[] serviceCode; // else serviceCode is null
    

    你可以使用

     private int[] serviceCode=new int[5];
    

    如果您不确定arraylength。使用List

     List<Integer> list=new ArrayList<>();
    

    【讨论】:

      【解决方案3】:

      当您简单地使用语句private int[] serviceCode; 声明一个数组时,您是在告诉编译器一个名为serviceCode 的变量将保存一个整数数组。此时,compile 不会被告知数组将保存多少个整数。因此,此时不会发生用于保存整数的实际内存分配。

      要开始将整数放入数组,相应的内存分配应该已经发生。仅当您使用以下语句初始化数组时,编译器才会处理此内存分配。

      int[] serviceCode = new int[5] 
      

      在上述初始化之后,将完成数组的内存分配以容纳5个整数,并且数组将填充整数的默认值(即'0')。现在您可以开始将不同的值放入数组中。

      在您的情况下,由于您尚未初始化数组,因此没有发生内存分配,这导致在您尝试访问数组时引发 NullPointerException。

      【讨论】:

        猜你喜欢
        • 2010-10-09
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-19
        • 1970-01-01
        相关资源
        最近更新 更多