4月25日大作业(半成品以及修改后的成品)(待分析错误)

代码如下

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;
            }
        }
    }
}



而且经过试验没有任何问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值