代码如下
import java.util.Scanner;
/*
5、菜单管理
任务:编写主程序,实现一个通讯录的菜单管理功能。
编程要求:定义 MenuPhone类,从键盘获取输入的值,如果为 1、2、3、4、5,分别调用 PhoneManage的新增、查看、删除、修改等方法;
如果输入为 6 ,退出程序,并输出:“退出成功!”;如果输入的是其它值时,输出:“选择错误!”,返回主菜单。
*/
public class MenuPhone{
public static void main(String[] args) {
User[] users = new User[10];
PhoneManage pm1 = new PhoneManage();
Scanner scan = new Scanner(System.in);
int no = scan.nextInt();
while(true){
if(no == 1){
System.out.println("调用新增");
pm1.addPhone(users);
}else if(no == 2){
System.out.println("调用查看");
pm1.showPhone(users);
}else if(no == 3){
System.out.println("调用删除");
pm1.deletePhone(users);
}else if(no == 4){
System.out.println("调用修改");
pm1.changePhone(users);
}else if(no == 5){
System.out.println("调用查找电话号码");
pm1.selectPhone(users,"要查谁的tel");
}else if(no == 6){
System.out.println("退出程序");
break;
}else{
System.out.println("选择错误");
}
}
}
}
class User{
private String name;
private String tel;
public User(){
}
public User(String name,String tel){
this.name = name;
this.tel = tel;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getTel() {
return tel;
}
}
/*
2)在 PhoneManage.java 类中定义一selectPhone(User[] users, String name)的方法,根据传入的姓名,查找其电话号码,并返回。
*/
class PhoneManage {
public void addPhone(User[] users) {
System.out.println("请输入姓名:");
Scanner scan = new Scanner(System.in);
String user_name = scan.next();
System.out.println("请输入手机号:");
String tel = scan.next();
int i = users.length;
for(int j=0;j<i;j++){
if(users[j] == null){
users[j].setName(user_name);
users[j].setTel(tel);
break;
}
}
}
public void showPhone(User[] users) {
int i = users.length;
for (int j = 0; j < i; j++) {
System.out.println("用户名 " + users[j].getName() + "电话号码 " + users[j].getTel());
}
}
public String selectPhone(User[] users, String name){
int i = users.length;
String tel_to_be_found = "0";
for(int j=0;j<i;j++){
if(users[i].getName() == name){
tel_to_be_found = users[i].getTel();
break;
}
}
return tel_to_be_found;
}
/*
3、删除用户
任务:实现删除通讯录用户的功能。
编程要求:在 PhoneManage.java 类定义一个 deletePhone(User[] users) 的方法
,无返回值,该方法实现根据输入的用户名,在通讯录中删除该用户信息;首先输出:“请输入姓名:”,
然后读取键盘输入的用户名,在 users 对象中删除对应的用户信息,最后输出:“删除成功!”。
*/
public void deletePhone(User[] users){
System.out.println("请输入姓名:");
Scanner scan = new Scanner(System.in);
String name_to_be_delete = scan.next();
int i = users.length;
for(int j=0;j<i;j++){
if(users[j].getName() == name_to_be_delete){
users[i] = null;
System.out.println("删除成功");
break;
}
}
}
/*
4、修改通讯录用户信息
任务:实现修改通讯录用户电话号码的功能。
编程要求
在 PhoneManage.java 类定义一个 changePhone(User[] users) 的方法,无返回值,
该方法实现修改用户电话号码的功能;首先输出:“请输入你要修改用户的名称:”,然后读取键盘输入的用户名,
在 users 对象中找到对应的用户信息;然后输出:“请输入新电话:”,读取键盘输入的电话号码,将用户的电话号码进行修改,最后输出:“修改成功!”。
*/
public void changePhone(User[] users){
System.out.println("请输入你要修改用户的名称:");
Scanner scan = new Scanner(System.in);
String tel_owner = scan.next();
int i = users.length;
for(int j=0;j<i;j++){
if(users[j].getName() == tel_owner){
System.out.println("请输入新电话:");
String newTel = scan.next();
users[j].setTel(newTel);
System.out.println("修改成功");
break;
}
}
}
}
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "User.setName(String)" because "users[j]" is null
at PhoneManage.addPhone(MenuPhone.java:83)
at MenuPhone.main(MenuPhone.java:19)
Process finished with exit code 1
为什么会错呢?我不到
修改后:
import java.util.Scanner;
/*
5、菜单管理
任务:编写主程序,实现一个通讯录的菜单管理功能。
编程要求:定义 MenuPhone类,从键盘获取输入的值,如果为 1、2、3、4、5,分别调用 PhoneManage的新增、查看、删除、修改、查电话号码方法;
如果输入为 6 ,退出程序,并输出:“退出成功!”;如果输入的是其它值时,输出:“选择错误!”,返回主菜单。
*/
public class MenuPhone{
public static void main(String[] args) {
User[] users = new User[10];
PhoneManage pm1 = new PhoneManage();
while(true){
Scanner scan = new Scanner(System.in);
int no = scan.nextInt();
if(no == 1){
System.out.println("调用新增");
pm1.addPhone(users);
}else if(no == 2){
System.out.println("调用查看");
pm1.showPhone(users);
}else if(no == 3){
System.out.println("调用删除");
pm1.deletePhone(users);
}else if(no == 4){
System.out.println("调用修改");
pm1.changePhone(users);
}else if(no == 5){
System.out.println("调用查号码");
System.out.println("请输入要查找的联系人");
String n1 = scan.next();
pm1.selectPhone(users,n1);
}else if(no == 6){
System.out.println("退出程序");
break;
}else{
System.out.println("选择错误");
}
}
}
}
class User{
private String name;
private String tel;
public User(){
}
public User(String name,String tel){
this.name = name;
this.tel = tel;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getTel() {
return tel;
}
}
/*
2)在 PhoneManage.java 类中定义一selectPhone(User[] users, String name)的方法,根据传入的姓名,查找其电话号码,并返回。
*/
class PhoneManage {
public void addPhone(User[] users) {
System.out.println("请输入姓名:");
Scanner scan = new Scanner(System.in);
String user_name = scan.next();
System.out.println("请输入手机号:");
String tel = scan.next();
User u1 = new User(user_name,tel);
int i = users.length;
for(int j=0;j<i;j++){
if(users[j] == null){
users[j] = u1;
break;
}
}
}
public void showPhone(User[] users) {
int i = users.length;
for (int j = 0; j < i; j++) {
if(users[j] != null){
System.out.println("用户名 " + users[j].getName() + "电话号码 " + users[j].getTel());
}
}
}
/*
在 PhoneManage.java 类中定义一selectPhone(User[] users, String name)的方法,根据传入的姓名,查找其电话号码,并返回。
*/
public void selectPhone(User[] users, String name){
int i = users.length;
for(int j=0;j<i;j++){
if(users[j] != null && name.equals(users[j].getName())){ // 一样,也得用equals()方法,不然不行
System.out.println("查找成功,电话为:"+users[j].getTel());
break;
}
}
}
/*
3、删除用户
任务:实现删除通讯录用户的功能。
编程要求:在 PhoneManage.java 类定义一个 deletePhone(User[] users) 的方法
,无返回值,该方法实现根据输入的用户名,在通讯录中删除该用户信息;首先输出:“请输入姓名:”,
然后读取键盘输入的用户名,在 users 对象中删除对应的用户信息,最后输出:“删除成功!”。
*/
public void deletePhone(User[] users){
System.out.println("请输入姓名:");
Scanner scan = new Scanner(System.in);
String name_to_be_delete = scan.next();
int i = users.length;
for(int j=0;j<i;j++){
if(users[j] != null && name_to_be_delete.equals(users[j].getName())){ //这个地方也是,好像不能用users[j].getName == name_to_be_delete;
users[j] = null;
System.out.println("删除成功");
break;
}
}
}
/*
4、修改通讯录用户信息
任务:实现修改通讯录用户电话号码的功能。
编程要求
在 PhoneManage.java 类定义一个 changePhone(User[] users) 的方法,无返回值,
该方法实现修改用户电话号码的功能;首先输出:“请输入你要修改用户的名称:”,然后读取键盘输入的用户名,
在 users 对象中找到对应的用户信息;然后输出:“请输入新电话:”,读取键盘输入的电话号码,将用户的电话号码进行修改,最后输出:“修改成功!”。
*/
public void changePhone(User[] users){
System.out.println("请输入你要修改用户的名称:");
Scanner scan = new Scanner(System.in);
String tel_owner = scan.next();
int i = users.length;
for(int j=0;j<i;j++){
if(users[j]!= null && tel_owner.equals(users[j].getName())){ // 把这个地方改成和答案一样以后就没有任何问题了
System.out.println("请输入新电话:");
String newTel = scan.next();
users[j].setTel(newTel);
System.out.println("修改成功");
break;
}
}
}
}
而且经过试验没有任何问题