我正在尝试创建一个方法来输出一个数组,只显示以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方法,并将输出直接打印到该方法中,它可以工作,因此我不明白为什么它不能在数组中返回结果。
1条答案
按热度按时间hgncfbus1#
错误信息实际上非常清楚。
这意味着您试图调用空对象上的setnumber。空对象数组来自这里的初始值设定项。由于list.length=8,这就为您提供了8个可放入真实对象的插槽。它不会在这些插槽中构造8个新对象。
所以当你转过身来试图操纵这里的一个插槽时:
然后爆炸是因为
array[i]
指向没有对象的插槽(null)。