对象数组练习案例

news2024/12/28 20:40:27
定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。
* 学生的属性:学号、姓名、年龄
* 要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断
* 要求2:添加完毕之后,遍历所有学生信息
* 要求3:通过id删除学生信息
* 如果存在,则删除,如果不存在,则提示删除失败
* 要求4:删除完毕之后,遍历所有学生信息
* 要求5:查询数组id为“2”的学生,如果存在,则将他的年龄+1岁

 Student.java

/*
 * Copyright (c) 2017, 2023, zxy.cn All rights reserved.
 *
 */
package cn.black;

/**
 * <p>Description:定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。</p>
 * 学生的属性:学号、姓名、年龄
 * 要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断
 * 要求2:添加完毕之后,遍历所有学生信息
 * 要求3:通过id删除学生信息
 * 如果存在,则删除,如果不存在,则提示删除失败
 * 要求4:删除完毕之后,遍历所有学生信息
 * 要求5:查询数组id为“2”的学生,如果存在,则将他的年龄+1岁
 * <p>Class:Student</p>
 * <p>Powered by zxy On 2023/5/25 21:40 </p>
 *
 * @author zxy [zxy06291@163.com]
 * @version 1.0
 * @since 17
 */
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;
    }
}
StudentTest.java
/*
 * Copyright (c) 2017, 2023, zxy.cn All rights reserved.
 *
 */
package cn.black;

/**
 * <p>Description:</p>
 * <p>Class:StudentTest</p>
 * <p>Powered by zxy On 2023/5/25 21:45 </p>
 *
 * @author zxy [zxy06291@163.com]
 * @version 1.0
 * @since 17
 */
public class StudentTest {
    public static void main(String[] args) {
        //1.创建一个数组用来存储学生对象
        Student[] arr = new Student[3];

        //2.创建学生对象并添加到数组当中
        Student stu1 = new Student(1, "zhangsan", 23);
        Student stu2 = new Student(2, "lisi", 24);
        Student stu3 = new Student(3, "wangwu", 25);

        //3.把学生对象添加到数组当中
        arr[0] = stu1;
        arr[1] = stu2;
        arr[2] = stu3;

        //要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断
        Student stu4 = new Student(4, "zhaoliu", 26);

        //唯一性判断
        //已存在---不用添加
        //不存在---就可以把学生对象添加进数组
        boolean flag = contains(arr, stu4.getId());
        if (flag) {
            //已存在---不用添加
            System.out.println("当前id重复,请修改id后再进行添加");
        } else {
            //不存在---就可以把学生对象添加进数组

            //把stu4添加到数组当中
            //1.数组已经存满---只能创建一个新的数组,新数组的长度 = 老数组 + 1
            //2.数组没有存满---直接添加

            int count = getCount(arr);
            if (count == arr.length) {
                //已经存满
                //创建一个新的数组,新数组的长度 = 老数组 + 1
                //然后把老数组的元素,拷贝到新数组当中

                Student[] newArr = creatNewArr(arr);
                //把stu4添加进去
                newArr[count] = stu4;

                //要求2:添加完毕之后,遍历所有学生信息
                printArr(newArr);
            } else {
                //没有存满
                //[stu1,stu2,null]
                //getCount 获取到的是2,表示数组当中已经有了2个元素
                //还有一层意思:如果下一次要添加数据,就是添加到2索引的位置
                arr[count] = stu4;

                //要求2:添加完毕之后,遍历所有学生信息
                printArr(arr);
            }
        }
        //要求3:通过id删除学生信息-如果存在,则删除,如果不存在,则提示删除失败
        //要找到id 在数组中对应的索引
        int index = getIndex(arr,4);
        if (index >= 0){
            //如果存在,则删除
            arr[index]  = null;

            //要求4:删除完毕之后,遍历所有学生信息
            printArr(arr);
        }else {
            //如果不存在,则提示删除失败
            System.out.println("当前id不存在,删除失败");
        }

        //要求5:查询数组id为“2”的学生,如果存在,则将他的年龄+1岁
        //先要找到id 为2 的学生对应的索引
        int index1 = getIndex(arr,2);
        if (index1 >= 0){
            //存在,则将他的年龄+1岁
            Student stu = arr[index1];
            //把原来的年龄拿出来
            int newAge = stu.getAge() + 1;
            //把+1之后的年龄塞回去
            stu.setAge(newAge);

            //遍历数组
            printArr(arr);
        }else {
            //不存在,则直接提示
            System.out.println("当前id不存在,修改失败");
        }
    }

    //创建方法-要求3:通过id删除学生信息-如果存在,则删除,如果不存在,则提示删除失败
    //1.我要干嘛? 找到id在数组中的索引
    //2.我需要什么? 数组 id
    //3.调用处是否需要继续使用方法的结果?要
    public static int getIndex(Student[] arr,int id){
        for (int i = 0; i < arr.length; i++) {
            //依次得到每一个学生对象
            Student stu = arr[i];
            //对stu 进行一个非空判断
            if (stu != null){
                int sid = stu.getId();
                if (sid == id) {
                    return i;
                }
            }
        }
        //循环结束之后,还没有找到就表示不存在
        return -1;
    }




    //创建方法-要求2:添加完毕之后,遍历所有学生信息
    public static void printArr(Student[] arr) {
        for (int i = 0; i < arr.length; i++) {
            Student stu = arr[i];
            if (stu != null) {
                System.out.println(stu.getId() + "," + stu.getName() + "," + stu.getAge());
            }
        }
    }


    //创建一个新的数组,新数组的长度 = 老数组 + 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 int getCount(Student[] arr) {
        //定义一个计数器用来统计
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != null) {
                count++;
            }
        }
        //循环结束之后,我就知道了数组中一共有几个元素
        return count;
    }

    //1.我要干嘛? 唯一性判断
    //2.我干这件事情,需要什么才能完成?  数组 id
    //3.调用处是否需要继续使用方法的结果? 必须返回
    public static boolean contains(Student[] arr, int id) {
        for (int i = 0; i < arr.length; i++) {
            //依次获取到数组里面的每一个学生对象
            Student stu = arr[i];
            //获取数组中学生对象的id
            int sid = stu.getId();
            //比较
            if (sid == id) {
                return true;
            }
        }
        //当循环结束之后,还没有找到一样的,那么就表示数组中要查找的id 是不存在的
        return false;

    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nautilus Chain:我们将支持EIP6969

在今年 5 月初&#xff0c;以太坊核心开发者、Slingshot 的 CTO zkCole 提出了一个通用的协议标准 EIP-6969 &#xff0c;其旨在实现合约保护收入&#xff08;在以太坊 L2 上引入 / 标准化 CSR &#xff09;&#xff0c;该提案可以看作是之前 EIP-1559的改进版&#xff0c;并在…

Record类浅喽一眼~

Record类的一点小概念嗷。 一. 基本使用 java19 的新特性: 我们先构造一个student的Record类. 默认构造几个属性. public record Student(Integer id,String name, String email,Integer age) {} 然后简单搞一点例子 public static void main(String[] args) { St…

2023年上半年系统分析师上午真题及答案解析

1.信息系统的构成包括( )。 A.计算机硬件、计算机软件、网络和通信设备、系统分析人员、系统设计人员、系统开发人员 B.计算机硬件、计算机软件、系统分析人员、系统设计人员、系统开发人员 C.计算机硬件、计算机软件、系统设计人员、系统开发人员、信息用户 D.计算机硬件…

【C++】类和对象——友元函数和友元类的概念、初始化列表、explicit关键字、static成员

文章目录 1.友元函数和友元类的概念1.1友元函数1.2友元类 2.构造函数知识补充2.1初始化列表2.2explicit关键字 3.static成员3.1static成员概念3.2static成员特性 1.友元函数和友元类的概念 在C中&#xff0c;友元函数和友元类是指允许非成员函数或非成员类访问某个类中的私有成…

LeetCode面向运气之Javascript—第13题-罗马数字转整数-99.21%

LeetCode第13题-罗马数字转整数 题目要求 给定一个罗马数字&#xff0c;将其转换成整数。 罗马数字 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M 分别代表1&#xff0c;5&#xff0c;10&#xff0c;50&#xf…

一些常用的分布式组件实现技巧

广播 可用redis的pubsub机制来支持集群内的广播。 基于redis的分布式锁 加锁 使用setnx命令&#xff1a; SET lock_key random_value NX PX 5000 其中&#xff1a; random_value 是客户端生成的唯一的字符串&#xff0c;用于在删除时唯一标识client身份。 NX 代表只在键不…

【开发实用】还在用BeanUtils?不如用MapStruct

文章目录 1. 什么是MapStruct2. 为什么使用MapStruct3. 如何使用MapStruct 1. 什么是MapStruct MapStruct是一个Java注解处理器&#xff0c;它可以简化Java bean之间的转换。它使用基于生成器的方法创建类型安全的映射代码&#xff0c;这些代码在编译时生成&#xff0c;并且比…

2023夏季黑客松大赛,Moonbeam邀请你来BUIDL

由Parity和OneBlock联合举办的「2023 夏季波卡黑客松大赛」正在火热开启中。自报名开启之日&#xff0c;便获得了来自海内外对波卡生态的高度专注和对Web3开发的热情。 本次黑客松聚焦智能合约、开发工具、社交网络等大赛命题&#xff0c;邀请了行业领军人、技术大咖、投资人等…

推进开源法律知识普及|2023开放原子全球开源峰会开源法律与合规分论坛即将启幕

随着开源在推动创新、促进协作方面的作用日益凸显&#xff0c;开源领域的法律与合规问题日益受到关注。 6月11日&#xff0c;开放原子全球开源峰会开源法律与合规分论坛将在北京经济开发区国家信创园召开&#xff0c;论坛以“开源知识产权的深度现实与广阔未来”为主题&#x…

基于SSM的校园旧书交易交换平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Mybatis_plus——标准分页功能制作

mybatispuls中提供分页查询中需要两个参数&#xff0c;一个是IPage接口的实现类&#xff0c;还有一个后面说。 IPage有且只有一个实现类Page类型在里面已经提供有了&#xff0c;传两个参数即可使用&#xff0c;一个是页码值&#xff0c;一个是每页显示数据的条数。查询完之后可…

chatgpt赋能python:Python代做:让您的网站更友好的SEO利器

Python代做&#xff1a;让您的网站更友好的SEO利器 如果您是一位网站管理员或者SEO工程师&#xff0c;您一定知道SEO对于网站的重要性。那么在SEO中&#xff0c;Python代做可以为您提供什么&#xff1f;在本文中&#xff0c;我们将通过介绍Python代做的技术和方法&#xff0c;…

unity发布webGL后无法预览解决

众所周知&#xff0c;unity发布成webgl后是无法直接预览的。因为一般来说浏览器默认都是禁止webgl运行的。 直接说我最后的解决方法&#xff1a;去vscode里下载一个live server ,安装好。 下载vscode地址Visual Studio Code - Code Editing. Redefined 期间试过几种方法都不管…

Ansys Zemax | 探究 OpticStudio 偏振分析功能

本文介绍了 OpticStudio 模拟基于偏振的光学现象的几种方法。本文的目的是在对基于偏振的光学进行建模时检查这些特征的优势和正确应用。讨论的功能包括偏振光瞳图、琼斯矩阵、双折射、表面涂层等。这些对于波片和隔离器等实际应用很重要。&#xff08;联系我们获取文章附件&am…

plt.loglog()函数的用法和示例(含代码)

目录 常用坐标下的图像显示在loglog函数下的显示同时显示参考文献 plt.loglog()函数通常是用于和对数函数相关的显示中。 在研究plt.loglog()函数之前&#xff0c;我们可以先从常见的线性平面坐标系入手。 如 np.linespace()函数,它在指定的间隔内返回均等的数字。 np.linespa…

Redis主从架构、数据同步原理、全量同步、增量同步

目录 专栏导读一、Redis主从架构二、数据同步原理三、全量同步的流程三、可以从以下几个方面来优化Redis主从就集群四、全量同步和增量同步区别&#xff1f;五、什么时候执行全量同步&#xff1f;六、什么时候执行增量同步&#xff1f;七、超卖问题 大家好&#xff0c;我是哪吒…

高完整性系统工程(八):Hoare Logic

目录 1. 霍尔逻辑&#xff08;Proving Programs Correct&#xff09; 1.1 警告&#xff08;Caveats&#xff09; 1.2 误解&#xff08;Misconception&#xff09; 1.3 编程语言&#xff08;Programming Language&#xff09; 1.4 程序&#xff08;Programs&#xff09; 1…

java学习 spring mybatis maven juc并发 缓存 分布式

Spring系列第11篇&#xff1a;bean中的autowire-candidate又是干什么的&#xff1f;_路人甲Java的博客-CSDN博客 Spring系列 Spring系列第1篇&#xff1a;为何要学spring&#xff1f; Spring系列第2篇&#xff1a;控制反转&#xff08;IoC&#xff09;与依赖注入&#xff08;DI…

I.MX RT1170加密启动详解(1):加密Boot镜像组成

使用RT1170芯片构建的所有平台一般都是高端场合&#xff0c;我们需要考虑软件的安全需求。该芯片集成了一系列安全功能。这些特性中的大多数提供针对特定类型攻击的保护&#xff0c;并且可以根据所需的保护程度配置为不同的级别。这些特性可以协同工作&#xff0c;也可以独立工…

macOS Ventura 13.5beta2 OpenCore 双引导分区原版黑苹果镜像

镜像特点&#xff08;本文原地址&#xff1a;http://www.imacosx.cn/113805.html&#xff0c;转载请注明出处&#xff09; 完全由黑果魏叔官方制作&#xff0c;针对各种机型进行默认配置&#xff0c;让黑苹果安装不再困难。系统镜像设置为双引导分区&#xff0c;全面去除clove…