JAVA入门——对象数组:对象数组进行增删改查

题目:不使用数据库,定义长度为3的数组,存储1~3名学生对象作为初始值(即1名 2名 3名都可以),学生对象的学号具有唯一性。学生属性:学号,姓名,年龄。

要求一:再添加一个学生对象,遍历所有学生

要求二:通过学号删除学生信息,遍历所有学生

要求三: 通过学号查询学生信息,若存在则修改年龄,遍历所有学生

首先设置初始值并遍历一下:

//主函数:
Friends friends[]=new Friends[3];
friends[0]=new Friends(1,"张三",11);
friends[1]=new Friends(2,"李四",22);
//friends[2]=new Friends(3,"王五",33);
//这行注释掉即原始数组未存满的情况,运行则是原数组存满的情况

printArr(friends);
//遍历方法:
public static void printArr(Friends arr[]){
    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i].getId()+"."+arr[i].getName()+","+arr[i].getAge());
    }
}

发现问题:若原始数组未存满,遍历时会报错。

分析原因:未存对象的数组默认值为null

解决方法:遍历增加if条件:只遍历arr[i]!=null(后续每次遍历都应增加if条件)

public static void printArr(Friends arr[]){
    for (int i = 0; i < arr.length; i++) {
        if(arr[i]!=null){
            System.out.println(arr[i].getId()+"."+arr[i].getName()+","+arr[i].getAge());
        }
    }
}
要求一:再添加一个学生对象,遍历所有学生

(分析:1. 对输入的学号进行唯一性判断  2. 情况一:原数组未存满,直接存入并输出;情况二:原数组已存满,创建新数组,将老数组拷贝至新数组,再将输入的对象存入新数组。)

//主函数:
        Scanner sc=new Scanner(System.in);
        Friends f=new Friends();
        Friends newf[]=new Friends[4];
        System.out.println("添加成员id:");
        while (true){
            int id=sc.nextInt();
            if(!contain(id,friends)){
                f.setId(id);
                System.out.println("添加成员姓名:");
                String name=sc.next();
                f.setName(name);
                System.out.println("添加成员年龄:");
                int age= sc.nextInt();
                f.setAge(age);

                int cnt=getCnt(friends);
                if (cnt<friends.length){
                    friends[cnt]=f;
                    newf=friends;
                }else {
                    Friends newfriends[]=creatNewArr(friends,f);
                    newf=newfriends;
                }
                printArr(newf);
                break;
            }else {
                System.out.println("该id已存在,请重新输入:");
            }
        }
//判断学号唯一性,即输入学号是否存在在原始数组中:
    public static boolean contain(int num,Friends friends[]){
        for (int i = 0; i < friends.length; i++) {
            if(friends[i]!=null){
                if(num==friends[i].getId()){
                    return true;
                }
            }
        }
        return false;
    }

 为判断原始数组是否存满,需要先统计存放数据的索引个数:

//获取原始数组存入数据的个数:
    public static int getCnt(Friends friends[]){
        int cnt=0;
        for (int i = 0; i < friends.length; i++) {
            if(friends[i]!=null){
                cnt++;
            }
        }
        return cnt;
    }
//如果原数组存满,创建新数组,并将输入的对象存入新数组:
    public static Friends[] creatNewArr(Friends old[],Friends f){
        Friends newarr[]=new Friends[old.length+1];
        for (int i = 0; i < old.length; i++) {
            newarr[i]=old[i];
        }
        newarr[old.length]=f;
        return newarr;
    }

要求二:通过学号删除学生信息,遍历所有学生

(分析:判断学号是否存在,若存在,返回相应索引,将索引数组赋值null;不存在提示重新输入。)

//主函数:
        System.out.println("输入删除成员的id:");
        while (true){
            int deleteid= sc.nextInt();
            if(getIndex(deleteid,newf)!=-1){
                newf[getIndex(deleteid,newf)]=null;
                break;
            }else {
                System.out.println("该id不存在,请重新输入:");
            }
        }
        printArr(newf);
//寻找学号对应的索引并返回,若不存在则返回-1:
    public static int getIndex(int num,Friends f[]){
        for(int i=0;i<f.length;i++){
            if(f[i]!=null){
                if (num==f[i].getId()){
                    return i;
                }
            }
        }
        return -1;
    }

要求三: 通过学号查询学生信息,若存在则修改年龄,遍历所有学生

 (分析:判断学号是否存在,存在则修改年龄,不存在提示重新输入。)

//主函数:
        System.out.println("输入查询修改成员的id:");
        while (true){
            int findid= sc.nextInt();
            if(getIndex(findid,newf)!=-1){
                int index=getIndex(findid,newf);
                System.out.println("修改年龄为:");
                int newage=sc.nextInt();
                newf[index].setAge(newage);
                break;
            }else {
                System.out.println("该id不存在,请重新输入:");
            }
        }
        printArr(newf);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值