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

 学生的属性:学号,姓名,年龄。

  要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。

  要求2:添加完毕之后,遍历所有学生信息。

package com.zhao.test4;

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;
}
}
package com.zhao.test4;

public class StudentTest {
/*定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。
学生的属性:学号,姓名,年龄。
要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。
要求2:添加完毕之后,遍历所有学生信息。*/ public static void main(String[] args) {
//创建一个数组用于存储最多三名学生的数据
Student[] stuArr = new Student[3];
//创建学生对象,并添加到数组中
//在括号中用快捷键ctrl+P查看有参构造内容
Student stu1 = new Student(1, "张三", 18);
Student stu2 = new Student(2, "李四", 19);
Student stu3 = new Student(3, "王五", 20); stuArr[0] = stu1;
stuArr[1] = stu2;
stuArr[2] = stu3;
//需求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。
Student stu4 = new Student(4, "赵六", 21);
//唯一性判断
//先判断,如果判断重复就不用添加了
//写一个方法去判断唯一性,返回true或false来进行下一步
boolean flag = isOnly(stuArr, stu4.getId());
if (flag) {
//不重复,将学生添加到数组中
//数组已满——创建一个新数组,数组长度=老数组长度+1
//数组未满——直接添加
//写一个方法去判断数组是否存满,用于进行下一步
int count = getArrCount(stuArr);
//当使用getArrCount方法时,如果数组未满
//那么得到的count同时数组[count]的位置也是下一个数据填入的位置
if (count == stuArr.length) {
//数据已存满
//写一个方法用于创建新数组
Student[] newStuArr = newStuArr(stuArr);
//将新数据存入到数组的最后一位
newStuArr[count] = stu4;
//需求2:添加完后遍历新数组
printArr(newStuArr);
} else {
//数据未存满,直接添加
stuArr[count] = stu4;
//需求2:添加完后遍历数组
printArr(stuArr);
} } else {
System.out.println("当前id已存在,请重新输入!");
} } //写一个方法去判断唯一性,返回true或false来进行下一步
public static boolean isOnly(Student[] stu, int id) {
for (int i = 0; i < stu.length; i++) {
if (stu[i] != null) {
if (stu[i].getId() == id) {
return false;
}
}
}
return true;
} //写一个方法去比较数组是否存满,用于进行下一步
public static int getArrCount(Student[] stu) {
int count = 0;
for (int i = 0; i < stu.length; i++) {
if (stu[i] != null) {
count++;
}
}
return count;
} public static Student[] newStuArr(Student[] stuArr) {
//创建一个新数组,数组长度是老数组的长度+1
Student[] newStuArr = new Student[stuArr.length + 1];
//拷贝老数组到新数组中
for (int i = 0; i < stuArr.length; i++) {
newStuArr[i] = stuArr[i];
}
return newStuArr;
} //添加完毕后遍历
public static void printArr(Student[] stuArr) {
for (int i = 0; i < stuArr.length; i++) {
Student stu = stuArr[i];
if (stu != null) {
System.out.println(stu.getId() + " " + stu.getName() + " " + stu.getAge());
}
}
}
}

JavaSE——复杂对象数组练习的更多相关文章

  1. JavaSE基础知识(5)—面向对象(对象数组和对象关联)

    一.对象数组 1.说明 数组的定义类型为对象类型 2.动态初始化 1.声明并开辟空间 Person[] pers = new Person[长度];2.赋值 for(int i=0;i<pers ...

  2. 关于 android Intent 传对象和对象数组的一些操作

    直接开正题,Intent传递值就是平常那些很简单的,接下来介绍传递 对象,和 对象数组 1 .intent 传递自定义的 对象 - 实体类继承  Serializable public class A ...

  3. php将对象数组转成普通数组

    不知道为什么,把数组序列化为json,然后存到redis(string类型).然后再取出来反序列化为数组,就变成对象数组了 thinkPHP普通数组取值$arr['key'] 对象数组取值$arr-& ...

  4. Winform窗体用对象数组做一个小项目

    首先我我们看一下需求:我们要做的是显示员工信息,实现项目经理给员工评分的功能! 首先项目经理是评分的人所以没有用,因为我们自己写,评分的就是我们自己.所以我们要做的是先在vs也就是我们的环境里建一个项 ...

  5. JS传递对象数组为参数给后端,后端获取

    前端JS代码: var conditons = []; var test1 = new Object(); test1.name="1"; test1.id="2&quo ...

  6. Struts2之提交对象数组至后台

    struts2中有许多很好的特性,比如在设置好getter和setter方法后,加上前端的匹配设置,后台即可自动将前端输入的数据转换为后台的相应的对象. 如现在传入一个Person类的对象,其中Per ...

  7. 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

    [源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, con ...

  8. java语言一维数组,对象数组

    /** * 对象数组的使用 */package com.test5; import java.io.BufferedReader;import java.io.InputStream;import j ...

  9. 如何将PHP对象数组转换成普通数组

    /** * 对象数组转为普通数组 * * AJAX提交到后台的JSON字串经decode解码后为一个对象数组, * 为此必须转为普通数组后才能进行后续处理, * 此函数支持多维数组处理. * * @p ...

  10. java 14-11 对象数组

    有5个学生,请把这个5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息. 创建学生类: 学生:Student 成员变量:name,age 构造方法:无参,带参 成员方法:getXxx()/ ...

随机推荐

  1. 【原创】linux实时应用如何printf输出不影响实时性?

    版权声明:本文为本文为博主原创文章,转载请注明出处 https://www.cnblogs.com/wsg1100.如有错误,欢迎指正. @ 目录 1. 前言 2. linux终端输出 3. 常见的N ...

  2. ajax补充知识点、多对多外键的三种创建方式、django内置序列化组件、批量操作数据、分页器推导思路与自定义分页器的使用、form组件

    今日内容 ajax补充说明 主要是针对回调函数args接收到的响应数据 1.后端request.is_ajax() 用于判断当前请求是否由ajax发出 2.后端返回的三板斧都会被args接收不在影响整 ...

  3. 浏览器刷新时候不删除信息,关闭后删除用户信息处理办法,浏览器监听刷新以及删除事件、cookie、session、sessionStorage、localStorage区别

    首先我们可以了解到:sessionStorage 不在不同的浏览器窗口中共享,即使是同一个页面: localStorage 和 cookie 在所有同源窗口是共享的 那么我们可以根据用户不同需求来进行 ...

  4. MySQL 留存率和复购率的场景分析

    实际工作中常见的业务场景是求次日留存率,还有一些会对次日留存率增加限制,例如求新用户的次日留存率或者求活跃用户留存率.另外,留存率和复购率看起来都是统计重复出现的概率,但实际求解方法是不一样的. [场 ...

  5. 发布并部署NCF站点的那些事

    简介 开工第一天,祝大家2023年钱兔无量,技术兔飞猛进 为更加方便大家一站式打通所有使用NCF的环节,在新年开工的第一天给大家带来如何发布最新版本的站点 无论你的网站在开发环境做的多么的炫酷,实用, ...

  6. 流程概述与顺序结构-选择结构_单if语句

    流程概述与顺序结构 概述 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.也就是说,程序的流程对运行结果 有直接的影响.所以,我们必须清楚每条语句的执行流程.而且,很多时候我们要 ...

  7. 11月16日内容总结——OSI传输层之TCP与UDP协议、应用层简介、socket模块介绍及代码优化、半连接池的概念

    目录 一.传输层之TCP与UDP协议 1.TCP协议(重要) 三次握手建链接(白话版) 三次握手专业版 四次挥手断连接(白话版) 四次挥手专业版 2.UDP协议 3.tcp和udp的对比 二.应用层简 ...

  8. My First Blog Ever——记我在交大ACM班的第一个学期

    很巧的是,就在俞老师下发"学期小结"这一任务的前一天,我在跟朋友聊天时想到了要将自己这一学期的经历以文字的形式留存.毕竟,过去的一个学期实在有太多东西值得记述了:我离开了自己从童年 ...

  9. C#/VB.NET 如何在不同工作簿之间复制单元格范围

    在处理 Excel 文档时,我们经常需要将数据整合到一个工作表以便于我们进行管理或数据对比.为了提高工作效率,我们可以在不同的工作簿之间复制选定的单元格区域或整个工作表.本文将演示如何通过编程方式将选 ...

  10. SpringBoot 2.x 在Tomcat8上无法运行,报无法访问错误

    非法访问:此Web应用程序实例已停止.无法加载[].为了调试以及终止导致非法访问的 这仅是我的一个Filter重写的时候没有重写他的其他两个方法,导致我在Tomcat8上不能运行,但在Tomcat9上 ...