java中关于面向对象数组的练习

java中关于面向对象数组的练习

一、概要介绍

​ 该练习主要分为以下五个要求

  • 首先创建学生对象,属性包括学号、姓名、年龄
  • 然后定义一个学生对象的数组存储一至三名学生对象
  • 添加一名新的学生对象,添加时需要判断学号的唯一性,完成后遍历数组
  • 给定一个学号,判断当前学生对象是否存在在数组中,如果存在就删除并遍历数组
  • 给定一个学号,从集合中找到该学生对象并把他的年龄加一,然后遍历数组

二、具体实现

​ 我将问题分为四个模块,首先肯定要创建学生类,这一步骤比较简单,就不附代码了,问题三四五分别在一个java类中实现。

  1. 问题三,首先创建一个学生对象的数组,假设存储了三个学生对象,然后对这个数组进行添加学生对象,在添加学生对象时,我们首先应该根据判断唯一性,这一步就决定了我们后面是否要进行添加,附代码如下:
 public static boolean contains(Student[] arr, int num){
        //依次获取到数组里面的每一个学生对象
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] != null) {
                if (arr[i].getNum() == num) {
                    return true;
                }
            }
        }
        return false;
    }

​ 通过这个返回值是布尔类型的函数,我们能够根据返回值决定是否需要添加学生对象,这里需要注意的是首先要判断当前数组元素是否为空,不然在编译时可能会报错,因为在判断学号时需要调用get函数。

​ 当判断完成之后就要进行添加,这里依旧是两种情况,如果当前数组还有空位那么直接添加到相应的空位置,如果已满就需要重新创建一个数组并把数组长度加一,通过判断数组元素的个数并与数组长度进行比较来确定,代码如下:

public static int getCount(Student[] arr){
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] != null)
                count++;
        }
        return count;
    }

//不存在,判断是否存满,这是主方法中的一部分
        int count = getCount(arr);
        if (count == arr.length) {
            
        }else {
            //没有存满
            arr[count] = stu4;
            //要求2,遍历所有的学生信息
            printArr(arr);
        }

​ 数组有空位置的话就直接在count对应的下标出添加元素即可,没有空位置需要重新创建一个新的学生对象数组,代码如下:

 public static Student[] createNewArr(Student[] arr){
        Student[] newArr = new Student[arr.length + 1];

        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];
        }
        return newArr;
    }

if (count == arr.length) {
            //已经存满
            //创建一个新的数组,长度等于老数组 + 1
            Student[] newArr = createNewArr(arr);
            newArr[count] = stu4;
	}

​ 上述过程实现后对数组进行遍历即可

  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.getNum() + ", " + stu.getName() + ", " + stu.getAge());
        }
    }
  1. 问题四是根据学号来删除学生对象,那么依旧是先判断数组中是否有该学号对应的学生,如果能找到的话返回下标值即可,判断代码如下:
public static int getIndex(Student[] arr , int num){
        for (int i = 0; i < arr.length; i++) {
            Student stu = arr[i];
            if(stu != null){
                int snum = stu.getNum();
                if(snum == num)
                    return i;
            }
        }
        //当循环结束,说明不存在
        return -1;
    }

​ 遍历数组寻找给定学号对应的数组下标值,找到了就返回对应的下标,如果遍历完成仍未找到则返回-1

int index = getIndex(arr, 2);
        if(index >= 0) {
            //如果存在,就直接删除
            arr[index] = null;
            printArr(arr);
        }else {
            //如果不存在,则提示删除失败
            System.out.println("删除失败");
        }
  1. 问题五和问题四过程类似,还是需要先找数组中对应元素的下标值然后进行操作,这里就不多赘述,直接上代码
public static int getIndex(Student[] arr , int num){
        for (int i = 0; i < arr.length; i++) {
            Student stu = arr[i];
            if(stu != null){
                int snum = stu.getNum();
                if(snum == num)
                    return i;
            }
        }
        //当循环结束,说明不存在
        return -1;
    }

​ 找到对应学号的学生对象后,需要调用get和set方法来实现年龄加一的功能

int index = getIndex(arr, 4);
        if(index >= 0){
            //存在,则将他的年龄加1
            int age = arr[index].getAge() + 1;
            arr[index].setAge(age);
            printArr(arr);
        }else{
            //不存在,则直接提示
            System.out.println("当前num不存在,无法修改");
        }

​ 完成后像之前一样遍历数组即可


三、案例总结

​ 通过这个简单的面向对象数组练习,能够很好的锻炼到我们的逻辑思维能力,在实现每一个功能时都要进行思考如何进行,最终通过不同的方法实现对对象数组的具体操作。虽然整个问题的要求较多,但拆分成不同的步骤来实现就能很清晰的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值