【问题标题】:How do I use an array that is of another class type?如何使用另一个类类型的数组?
【发布时间】:2016-06-05 18:32:34
【问题描述】:

我已经声明了一个名为 Member 的类。然后我分配了一个成员类型的数组。当我尝试将东西放入数组时,它给了我这个错误:

Exception in thread "main" java.lang.NullPointerException
    at HW2_2.main(HW2_2.java:15)

这是我的代码:

import c.Member;

import java.util.Scanner;
public class HW2_2 
{
     public static void main(String []args)
     {
         Member[] p = new Member[100];
         Scanner in = new Scanner(System.in);
         p[0].setID("apple12");
         p[0].setPassword("1234");
         p[0].setFirstname("fname");
         p[0].setLastname("lname");
         p[0].setEmail("*@gmail.com");
     }
 }

如何解决这个问题,使我可以将数据存储到我的数组中?

【问题讨论】:

    标签: java arrays class null


    【解决方案1】:

    您创建了一个对象p,它指向Member 对象的数组。太棒了。但是,数组中的每个对象默认为null。您不能简单地对它们执行操作。

    你可能想做一些类似...

    //...
    p[0] = new Member(...);
    p[0].setId("ID");
    //... And so on
    

    从这里学到的重要一点是数组声明语法不会初始化数组本身的值。那是不可能的,对吧?您将如何将参数分别传递给每个构造函数?您必须手动完成。

    【讨论】:

      【解决方案2】:

      当你:

      Member[] p = new Member[100];
      

      它将所有数组成员初始化为空(因为这是一个对象类型数组)。

      如果您希望成员可用,则需要对其进行初始化,因此您必须:

      p[0] = new Member();
      

      在您可以使用该成员之前。


      如果要一次初始化所有成员,则需要遍历数组中的所有元素,并为每个成员创建一个;使用 Java 8 可以这样做:

      IntStream.range(0, p.length).forEach(index -> p[index] = new Member());
      

      奇怪的是,Arrays 类中没有 <T> void fill(T[] array, Supplier<T> supplier) 这样的方法。

      【讨论】:

        猜你喜欢
        • 2021-02-24
        • 1970-01-01
        • 2022-01-27
        • 1970-01-01
        • 2021-10-31
        • 1970-01-01
        • 2014-11-18
        • 1970-01-01
        相关资源
        最近更新 更多