JAVA 复杂对象数组对象练习:添加、遍历、删除、修改

定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据

学生对象的学号,姓名各不相同。

学生的属性:学号,姓名,年龄。
要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。
要求2:添加完毕之后,遍历所有学生信息。
要求3:通过id删除学生信息,如果存在,则删除,如果不存在,则提示删除失败。
要求4:删除完毕之后,遍历所有学生信息。
要求5:查询数组id为“2”的学生,如果存在,则将他的年龄+1岁

 先创建一个学生类JAVAbean

public class Student {
    private int id;
    private String name;
    private int age;

    public Student() {
    }

    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

首先需要一个数组来存储学生对象

 Student[] arr = new Student[3]; // 存放3个学生对象

 创建学生对象并且添加到数组当中

Student stu1 = new Student(1, "zhangsan", 23); //对应 ID 名字 年龄
Student stu2 = new Student(2, "lisi", 24);
Student stu3 = new Student(3, "wangwu", 25);


arr[0] = stu1;
arr[1] = stu2;
arr[2] = stu3;

需要再添加一个学生对象

首先通过id判断新添加的学生是否存在原数组中

存在:提示 “已存在”

不存在:需要将新学生添加到数组中

              但原数组初始化只能存放三个学生数据

Student[] arr = new Student[3];

  再判断原数组是否存满

存满:需要创建一个新数组,才能够把新学生数据放进去

没存满:直接把新学生数据填进去

创建方法,用于判断学生存不存在

  //返回一个布尔值来判断存不存在  需要用到数组和ID
public static boolean contains(Student[] arr, int id) {
        //遍历数组,定义一个stu存放遍历的数据
        for (int i = 0; i < arr.length; i++) {
            Student stu = arr[i];
            if (stu != null) {  //对当前索引的数据是否是空值进行一个判断
                int sid = stu.getId(); //把当前遍历到学生的id存放在sid中
                if (sid == id) {  将sid和获取到的id进行判断,如果一样就返回true 代表存在
                    return true;
                }
            }
        }

        return false; //循环结束代表不存在
    }

新建 一个学生对象,调用方法来判断存不存在,存在直接提示“存在”

Student stu4 = new Student(4, "zhaoliu", 26);

        boolean flag = contains(arr, stu4.getId());
        if (flag) {
            System.out.println("存在");
        }

如果不存在,我们创建一个方法,判断原数组数据是否存满,没存满直接把stu4塞进去,存满了,我们需要再用一个方法创建一个新数组,新数组包括原数组的内容,再把stu放到新数组里

        

    //这个方法需要返回数组内有几个值
  public static int getCount(Student[] arr) {
        //定义一个count 累计个数
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != null) {
                count++;   //遍历数组,如果当前不是空值,个数就加1
            }
        }
        return count;
    }
//方法二,需要返回一个新数组     
 public static Student[] creatNewArr(Student[] arr) {
           //因为数据存满了才需要新数组,所以长度为原数组+1
        Student[] newArr = new Student[arr.length + 1];
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];  //将原数组的内容放到新数组,最后返回新数组
        }
        return newArr;
    }

 //方法三,遍历数组打印数据
     public static void printArr(Student[] arr) {
        for (int i = 0; i < arr.length; i++) {
            Student stu = arr[i];
            if (arr[i] != null) {
                System.out.println(stu.getId() + "," + stu.getName() + "," + stu.getAge());
            }
        }
else {
            int count = getCount(arr);
            if (count == arr.length) {
                Student[] newArr = creatNewArr(arr);
                newArr[count] = stu4;
                printArr(newArr);
            } else {
                arr[count] = stu4;
                printArr(arr);
            }

如果不存在

获取原数组中非空值数据的个数

如果 非空值 = 原数组长度  说明存满,需要一个新数组才能把stu放进去

通过方法得到新数组,然后把stu4放进去

这里count是非空值的个数,如果数组存满了,非空值的个数是3,新数组的长度是4

newArr[count] 就是最后一个索引 ;如果没存满,非控制个数是2

arr[count] 刚好也是原数组剩下的最后一个索引

最后根据情况决定打印新数组或者旧数组

代码此时运行

ID相同

 原数组存满

原数组没存满


还需要通过ID删除学生信息,那肯定先要判断数组内有没有这个ID

存在就将其信息删除,不存在就提示“删除失败”

定义一个方法,这个方法可以帮助我们判断需要删除的数据存不存在与数组内,如果存在,需要删除这个信息,就需要这个数据在数组内的索引下标

 public static int getIndex(Student[] arr,int id){
        for (int i = 0; i < arr.length; i++) {
            Student stu = arr[i];
            if (stu != null){
                int sid = stu.getId();
                if (sid == id){
                    return i;
                }
            }
        }
        //循环结束没找到代表不存在
        return -1;
    }

遍历数组,把id放到sid中,然后把sid和获取到的id(就是要删除的id)进行比较

如果相同说明存在,直接返回 i ,就是这个数据在数组内的索引

如果循环结束,说明要删除的信息不存在,返回一个 -1 ,因为数组索引不存在 -1

后续我们只用对这个数字判断就行

  int index = getIndex(arr, 4);
        if (index >= 0){
            arr[index] = null;
            printArr(arr);
        }else {
            System.out.println("当前id不存在,删除失败");
        }

判断如果 index >= 0 ,直接把arr[index]变为控制,就是删除这个数据,然后打印数组

如果返回的是-1,说明数组中没这个数据

删除id为4的运行结果

删除ID为2的运行结果 


最后一步,查询id为2的学生信息,如果存在,就把年龄+1 

我们首先判断这个id存不存在,和上面分析过程一样。

id存在,我们获取到这个id在数组中的数据,然后再获取到age,把age+1放到newAge中

最后把数据打印出来即可

     int index = getIndex(arr,3);

        if (index >= 0){
            Student stu = arr[index];
            int newAge = stu.getAge() + 1;
            stu.setAge(newAge);
            printArr(arr);
        }else {
            System.out.println("当前id不存在,修改失败");
        }



“判断并获取下标和打印数组的方法同前面一样”

修改id为3的运行结果

修改id为4的运行结果         

e5c9a94d-bd57-4779-9408-834fe334dc71
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈等闲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值