我觉得题主是事先定义了一个固定长度的数组,但是向数组里添加对象的数量却小于数组的长度,所以在按index进行比较时会出现NullPointerException。我建议题主改用一个HashSet,这样名单的长度就是灵活的了。另外showName方法我不知道题主为何不直接调用this.name而需要另提供一个参数name,因此我也稍作了改动。我修改的版本如下:
import java.util.HashSet;
import java.util.Scanner;
public class CustomerBiz2 {
HashSetname = new HashSet (); // 输入客户姓名的数组长度
public HashSetaddName() {
Scanner scan = new Scanner(System.in);
boolean condition; // 是否继续输入的布尔类型
int i = 0;
do {
System.out.print("请输入客户的姓名:");
this.name.add(scan.next());
System.out.print("继续输入吗?(y/n):");
String choose = scan.next(); // 输入是否继续
if ("y".equals(choose)) {
condition = true;
} else {
condition = false;
}
i++;
} while (condition);
return this.name;
}
// 显示输入的客户姓名
public void showName() {
System.out.println("\n\t\t客户姓名列表");
for (String names : this.name) {
System.out.print(names + "\t");
}
}
// 修改用户名
public void updateName() {
Scanner scan = new Scanner(System.in);
System.out.print("\n请输入要修改的客户姓名:");
String oldName = scan.next();
boolean found = false;
for (String names : this.name) {
if (names.equals(oldName)) {
System.out.print("\n请输入新的客户名:");
String newName = scan.next();
this.name.remove(oldName);
this.name.add(newName);
found = true;
System.out.println("\n\t\t找到结果并修改成功!");
break;
}
}
if (!found)
System.out.println("未找到结果,修改失败");
}
public static void main(String[] args) {
CustomerBiz2 test = new CustomerBiz2();
test.addName();
test.showName();
test.updateName();
test.showName();
}
}
运行main方法的例子:
修改成功:
请输入客户的姓名:a
继续输入吗?(y/n):y
请输入客户的姓名:b
继续输入吗?(y/n):y
请输入客户的姓名:c
继续输入吗?(y/n):n
客户姓名列表
a b c
请输入要修改的客户姓名:a
请输入新的客户名:asd
找到结果并修改成功!
客户姓名列表
b c asd
修改失败:
请输入客户的姓名:a
继续输入吗?(y/n):y
请输入客户的姓名:b
继续输入吗?(y/n):y
请输入客户的姓名:c
继续输入吗?(y/n):n
客户姓名列表
a b c
请输入要修改的客户姓名:d
未找到结果,修改失败
客户姓名列表
a b c