java - 为什么这会引发空点异常?
问题描述
出于某种原因,每当我对此进行测试时,IDE 都会在第 46 行抛出 NullPointerException(检查数组中名称的 for 循环)。它似乎工作,因为它获取名称并返回它,但随后立即出现异常。谁能解释一下?谢谢!
导入 java.util.*;类电话号码{
private String name;
private String number;
PhoneNumbers(String n, String numb) {
this.name = n;
this.number = numb;
}
public String getName() {
return name;
}
public String getNumber() {
return number;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
boolean repeat = true;
int count = 11;
PhoneNumbers[] contacts = new PhoneNumbers[30];
contacts[0] = new PhoneNumbers("Gina", "(847) 342-0912");
contacts[1] = new PhoneNumbers("Marcia", "(847) 341-2392");
contacts[2] = new PhoneNumbers("Rita", "(847) 354-0654");
contacts[3] = new PhoneNumbers("Jennifer", "(414) 234-0912");
contacts[4] = new PhoneNumbers("Fred", "(414) 435-0434");
contacts[5] = new PhoneNumbers("Neil", "(608) 123-0914");
contacts[6] = new PhoneNumbers("Judy", "(608) 123-0312");
contacts[7] = new PhoneNumbers("Arlene", "(608) 123-0312");
contacts[9] = new PhoneNumbers("LaWanda", "(920) 787-9813");
contacts[10] = new PhoneNumbers("Deepak", "(930) 412-0991");
while (repeat) {
boolean found = false;
System.out.print("Enter your friends name: ");
String nameInput = sc.nextLine();
if (!nameInput.equalsIgnoreCase("quit")){
for(int i = 0; i < count - 1; i++){
if (contacts[i].getName().equalsIgnoreCase(nameInput)) {<---Here's where the issue occurs***
found = true;
System.out.println(contacts[i].getName() + "'s number is " + contacts[i].getNumber());
}
}
if (!found){
System.out.println("Enter your friends phone number: ");
String num = sc.nextLine();
contacts[count + 1] = new PhoneNumbers(nameInput, num);
count++;
}
}else if (nameInput.equalsIgnoreCase("quit")) {
repeat = false;
}else if (count == 30){
repeat = false;
}
}
}
}
解决方案
您在初始化中丢失了,因此在尝试访问不存在的联系人 8 的名称时contacts[8]
会得到一个:NullPointerException
// ...
contacts[7] = new PhoneNumbers("Arlene", "(608) 123-0312");
contacts[9] = new PhoneNumbers("LaWanda", "(920) 787-9813");
// ...
推荐阅读
- angular - Angular 中的 DefaultIterableDiffer 已弃用。我现在该怎么办?
- javascript - Javascript在函数中增加一个变量
- class - Kotlin - What is the point of private variables inside private companion objects?
- javascript - 将字符串中的所有浮点数相乘
- java - 使用三个堆栈的回文 - 仅输出是“是回文”(java逻辑错误)
- python-3.x - 无法让 Selenium 定位元素
- powershell - Get-Content .csv 并将其用作路径名的变量
- java - 无法创建 PoolableConnectionFactory [JSP Servlets 和 MySQL]
- initialization - 如何将 liquibase changelogSyncSQL 或 changelogSync 运行到标签和/或标签?
- python - 散景 - 绘制上轴和右轴