设置数组元素时发生nullpointerexception

u3r8eeie  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(363)

我正在尝试创建一个方法来输出一个数组,只显示以030开头的特定数字,但在internet上还没有找到任何解决方案。运行程序时,会显示以下异常:

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Contact.setNumber(String)" because "array[i]" is null.

我已经创建了两个类,一个用于contact,在其中放置用于数字和计算的getter和setter,第二个用于过滤包含数字的数组的类contactmanagement(public static contact[]showberlinscompactlist(contact[]list))

public class ContactManagement {

static Contact N1 = new Contact("1", "0301340711036");
static Contact N2 = new Contact("2", "0301144663311");
static Contact N3 = new Contact("3", "0201629360578");
static Contact N4 = new Contact("4", "0451629360123");
static Contact N5 = new Contact("5", "0303544442103");
static Contact N6 = new Contact("6", "0305344442103");
static Contact N7 = new Contact("7", "0701571456781");
static Contact N8 = new Contact("8", "0701571446781");

public static Contact[] ContactList = new Contact[]{N1, N2, N3, N4, N5, N6, N7, N8};

public static Contact[]  ShowBerlinsContactList(Contact[] list) {
    Contact[] array = new Contact[list.length] ;

    for (int i = 0; i <= list.length; i++) {
        String a = list[i].getNumber();
        char c0 = a.charAt(0);
        char c1 = a.charAt(1);
        char c3 = a.charAt(2);
        for(int j=0;j<= array.length; j++) {
            if ((c0 == '0') && (c1 == '3') && (c3 == '0')) {
                array[i].setNumber(a);
            }
        }
    }
    return array ;
}

public static void main(String[] args) {
    try{
    for(int i = 0 ; i <= ContactList.length ; i++) {
        System.out.println("N"+(i+1) +":" + ContactList[i].toString());
    }
    } catch (Exception e) {}

    Contact[] BerlinContactList = new Contact[10] ;
     for(int j=0 ; j < 10 ; j++){
         BerlinContactList[j] = ShowBerlinsContactList(ContactList)[j] ;
         System.out.println(BerlinContactList[j]);
     }
    }
    }
public class Contact {

public String Number;
public String Numerisation;

 Contact(String Numerisation, String Number) {
  this.Number = Number;
  this.Numerisation = Numerisation;
 }

 public String getNumber() {
  return Number;
 }

 public String getNumerisation() {
  return Numerisation;
 }

 public void setNumber(String number) {
  Number = number;
 }

 public void setNumerisation(String numerisation) {
  Numerisation = numerisation;
 }

 public String toString() {
  return  Number;
 }
}

我尝试将public static contact[]showberlinscontactlist(contact[]list)更改为public static void方法,并将输出直接打印到该方法中,它可以工作,因此我不明白为什么它不能在数组中返回结果。

hgncfbus

hgncfbus1#

错误信息实际上非常清楚。

java.lang.NullPointerException: Cannot invoke "Contact.setNumber(String)" because "array[i]" is null.

这意味着您试图调用空对象上的setnumber。空对象数组来自这里的初始值设定项。由于list.length=8,这就为您提供了8个可放入真实对象的插槽。它不会在这些插槽中构造8个新对象。

Contact[] array = new Contact[list.length] ;

所以当你转过身来试图操纵这里的一个插槽时:

array[i].setNumber(a);

然后爆炸是因为 array[i] 指向没有对象的插槽(null)。

相关问题