JAVA练习题19:复杂对象数组练习

规则:定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。

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

测试类

import java.util.Scanner;

public class FTest {
    public static void main(String[] args) {
        /*
         * 规则:定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。
         * 学生的属性:学号,姓名,年龄
         * 要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断
         * 要求2:添加完毕之后,遍历所有学生信息
         * 要求3:通过id删除学生信息:如果存在,则删除,如果不存在,则提示删除失败
         * 要求4:删除完毕之后,遍历所有学生信息
         * 要求5:查询数组id为"xxxxx"的学生,如果存在,则将他的年龄+1岁
         * */
        //1.创建一个数组用来储存学生对象
        Student[] stu = new Student[2];
        stu[0] = new Student(20221006, "张三", 19);
        stu[1] = new Student(20221007, "李四", 20);
        //要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断
        Student new_stu = new Student(20221008, "王五", 20);

        //键盘输入要删除的学生id
        Scanner sc = new Scanner(System.in);

        //唯一性判断(学号)
        boolean flag = contains(stu, new_stu.getSno());
        if (flag) {
            //已存在 --- 不用添加
            System.out.println("当前id重复,请修改id后再次进行添加!");
        } else {
            //不存在 --- 把学生对象添加进数组
            //把new_stu添加到数组当中
            int count = getCount(stu);
            if (count == stu.length) {
                //1.数组已经存满 --- 只能创建一个新的数组,新数组的长度 = 老数组长度 + 1
                Student[] newStu = creatNewArr(stu);
                newStu[count] = new_stu;
                //要求2:添加完毕之后,遍历所有学生信息
                printArr(newStu);
                //要求3:通过id删除学生信息:如果存在,则删除,如果不存在,则提示删除失败
                //要找到id在数组中对应的索引
                System.out.println("请输入要删除的学生id:");
                int id = sc.nextInt();
                int index = getIndex(newStu, id);
                if (index >= 0) {
                    newStu[index] = null;
                    System.out.println("删除成功");
                } else {
                    System.out.println("学生不存在,删除失败!");
                }
                //要求4:删除完毕之后,遍历所有学生信息
                printArr(newStu);
                //要求5:查询数组id为"xxxxx"的学生,如果存在,则将他的年龄+1岁
                System.out.println("请输入要查询的学生id:");
                int queryId = sc.nextInt();
                int query_index = getIndex(newStu, queryId);   //被查询学生id的位置
                if(query_index == -1){
                    System.out.println("您查询的" + queryId + "不存在");
                }else{
                    int tempAge = newStu[query_index].getAge();
                    newStu[query_index].setAge(tempAge + 1);
                }
                //修改完毕之后,遍历所有学生信息
                printArr(newStu);
            } else {
                //2.数组没有存满 --- 直接添加
                stu[count] = new_stu;
                //要求2:添加完毕之后,遍历所有学生信息
                printArr(stu);
                //要求3:通过id删除学生信息:如果存在,则删除,如果不存在,则提示删除失败
                //要找到id在数组中对应的索引
                System.out.println("请输入要删除的学生id:");
                int id = sc.nextInt();
                int index = getIndex(stu, id);
                if (index >= 0) {
                    stu[index] = null;
                    System.out.println("删除成功");
                } else {
                    System.out.println("学生不存在,删除失败!");
                }
                //要求4:删除完毕之后,遍历所有学生信息
                printArr(stu);
                //要求5:查询数组id为"xxxxx"的学生,如果存在,则将他的年龄+1岁
                System.out.println("请输入要查询的学生id:");
                int queryId = sc.nextInt();
                int query_index = getIndex(stu, queryId);   //被查询学生id的位置
                if(query_index == -1){
                    System.out.println("您查询的" + queryId + "不存在");
                }else{
                    int tempAge = stu[query_index].getAge();
                    stu[query_index].setAge(tempAge + 1);
                }
                //修改完毕之后,遍历所有学生信息
                printArr(stu);
            }
        }
    }

    //方法:判断Sno = id的对象是否是存在数组当中
    //存在  ---  true
    //不存在 --- false
    public static boolean contains(Student[] arr, int id) {
        for (int i = 0; i < arr.length; i++) {
            //依次获取数组里面的每一个学生对象,然后比较其id
            //如果arr[i] == null 则null无法使用.getSno(),故会报错,所以需要判断
            if (arr[i] != null) {
                if (arr[i].getSno() == id) {
                    return true;
                }
            }
        }
        return false;
    }

    //方法:判断数组中已经存储了几个元素
    public static int getCount(Student[] arr) {
        //定义一个计数器用来统计
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != null) {
                count++;
            }
        }
        //当循环结束之后,就知道了数组中共有多少个元素
        return count;
    }

    //方法:创建一个新的数组,新数组的长度 = 老数组长度 + 1
    //然后把老数组的元素,拷贝到新数组当中
    public static Student[] creatNewArr(Student[] arr) {
        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++) {
            if (arr[i] != null) {
                System.out.println("Sno=" + arr[i].getSno() + ", name='" + arr[i].getName() + ", age=" + arr[i].getAge());
            }
        }
    }

    //方法:找到id在数组中对应的索引
    public static int getIndex(Student[] arr, int id) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != null) {
                if (arr[i].getSno() == id) {
                    return i;
                }
            }
        }
        //当循环结束之后,还没有找到就表示不存在
        return -1;
    }
}

JavaBean类

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

    public int getSno() {
        return Sno;
    }

    public void setSno(int sno) {
        Sno = sno;
    }

    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;
    }
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 基础知识练习 ................................................................................................................................... 1 第一章练习题Java入门) ........................................................................................................... 2 参考答案 ................................................................................................................................... 5 第二章练习题数据类型和运算符) ........................................................................................... 6 参考答案 ................................................................................................................................. 11 第三章练习题(流程控制与数组) ............................................................................................. 12 参考答案 ................................................................................................................................. 18 第四章练习题(封装) ................................................................................................................. 19 参考答案 ................................................................................................................................. 25 第五章练习题(继承) ................................................................................................................. 26 参考答案 ................................................................................................................................. 32 第六章练习题(抽象类与接口) ................................................................................................. 33 参考答案 ................................................................................................................................. 40 第七章练习题(多态) ................................................................................................................. 41 参考答案 ................................................................................................................................. 47 第八章练习题(异常) .............................

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值