
面向对象这一块也要结束了,不知道读者们掌握的如何呢。不过面向对象的路程远不止于此,可以利用面向对象来做一些小型的系统来巩固一下。接下来就进入新的章节了,回顾一下这已经是第五天了,之前说的7天拿下java还是太过于理想化了。当然如果只是为了了解一下,那学习到这里已经算是结束了,不过为了后面的学习,java这部分要深入的去学,毕竟在开发方面java还是主流的编程语言。在进阶篇的时候希望大家不要放弃,跟着小编的步伐就行了。一起加油!!!
建议先看完基础 篇再来看进阶篇
Java面向对象基础篇综合训练(附带全套源代码及逐语句分析)->基于javabeen
本案例的主要目的是对学生信息的管理,可以简单理解为简易版的学生管理系统。主要目的还是熟练面向对象的操作。javabeen的应用一定要熟练,这对后面的学习帮助很大。虽然本案例所实现的功能并不是很多,但是对于初学者还是有一定的难度的,代码量150行左右。感兴趣的同学可以在上面进行功能的拓展。
这也算是日后一些命令行系统的模板,如果有想法的小伙伴想要去拓展功能,可以去参考一下小编之前所写的基于C语言的一些系统。
温馨提示一下,这些系统都能用于C语言这门学科的程序设计作业
//复杂对象数组练习
//1.创建数组存储学生对象
Students[] s = new Students[3];
//2.创建学生对象
Students s1 = new Students(1, "张三", 18);
Students s2 = new Students(2, "李四", 20);
Students s3 = new Students(3, "王五", 21);
//3.将学生对象添加到数组中
s[0] = s1;
s[1] = s2;
s[2] = s3;这一步和之前的没什么区别就是简单的创建数组存放信息
创建数组存储学生对象:
Students[] s = new Students[3];
s 的数组,类型为 Students[],长度为 3。这意味着 s 可以存储三个 Students 类型的对象。创建学生对象:
Students s1 = new Students(1, "张三", 18); Students s2 = new Students(2, "李四", 20); Students s3 = new Students(3, "王五", 21);
Students 对象:s1、s2 和 s3。Students 类的构造方法进行初始化,分别传入学生的ID、姓名和年龄信息。将学生对象添加到数组中:
s[0] = s1; s[1] = s2; s[2] = s3;
Students 对象分别赋值给数组 s 的第 0、1、2 个位置。s 包含了三个学生对象,分别是 s1、s2 和 s3,它们按照顺序存储在数组中。//4.再添加一个学生
Students s4=new Students(4,"VON",18);
boolean flag = contains(s,s4.getId());
if(flag){//id重复
System.out.println("当前id重复,请修改id");
}else{
int count = getCount(s);
if(count==s.length){//已经存满
Students[] news = CreateNews(s);
news[count] = s4;
Prints(news);//遍历所有学生信息
}else{//没有存满
s[count] = s4;
Prints(s);//遍历所有学生信息
}
}创建新学生对象:
Students s4 = new Students(4, "VON", 18);
s4 的新的 Students 对象,该对象的ID为 4,姓名为 "VON",年龄为 18。检查是否存在重复的ID:
boolean flag = contains(s, s4.getId());注:contains是下面所构造的方法
contains 方法用于检查数组 s 中是否已经存在与 s4 相同的学生ID。这里假设该方法返回一个布尔值 flag,表示是否存在重复的ID。根据情况进行处理:核心步骤
if (flag) {
System.out.println("当前id重复,请修改id");
} else {
int count = getCount(s);
if (count == s.length) { // 数组已经存满
Students[] news = CreateNews(s); // 创建一个新的数组,通常是扩展现有数组的容量
news[count] = s4; // 将新的学生对象添加到新数组的最后
Prints(news); // 打印遍历所有学生信息
} else { // 数组未存满
s[count] = s4; // 将新的学生对象直接添加到数组的下一个空位
Prints(s); // 打印遍历所有学生信息
}
}flag 为 true,即存在重复的ID,则输出提示信息 "当前id重复,请修改id"。s 中已有的学生数量 count 进行判断: count 等于数组 s 的长度,表示数组已经存满。此时调用 CreateNews(s) 方法创建一个新的数组 news,通常会扩展原有数组的容量,然后将 s4 添加到 news 的末尾,并调用 Prints(news) 方法打印遍历所有学生的信息。count 小于数组 s 的长度,表示数组未存满。直接将 s4 添加到数组 s 的下一个空位,并调用 Prints(s) 方法打印遍历所有学生的信息。//找到id在数组中对应的索引
//这一步删除学生的id为2
int index = GetIndex(s,2);//这里是对原数组进行的操作,只有三位同学
if(index>=0){//id存在
s[index] = null;
Prints(s);
}else{//id不存在
System.out.println("当前id不存在,删除失败!");
}
System.out.println();找到id在数组中对应的索引:
int index = GetIndex(s, 2);注:GetIndex是下面构造的方法
GetIndex 方法用于在数组 s 中查找具有指定ID(这里是2)的学生对象,并返回该学生对象在数组中的索引。假设 index 是这个操作的返回值。根据索引进行删除操作:
if (index >= 0) { // 如果找到了指定ID的学生对象
s[index] = null; // 将该索引位置的学生对象置为 null,相当于删除
Prints(s); // 打印遍历所有学生信息
} else { // 如果未找到指定ID的学生对象
System.out.println("当前id不存在,删除失败!");
}index 大于等于 0,说明找到了具有指定ID的学生对象。此时将数组 s 中该索引位置的元素设为 null,表示删除该学生对象。Prints(s) 方法,打印遍历所有学生信息,显示更新后的数组内容。index 小于 0,表示未找到指定ID的学生对象,输出 "当前id不存在,删除失败!"。 //方法一、找到id为1的学生的索引
int index2 = GetIndex(s,1);
if(index2>=0){
int newage = s[index2].getAge()+1;
s[index2].setAge(newage);
Prints(s);
}
System.out.println();
/*方法二、利用循环
for (int i = 0; i < s.length; i++) {
if(s[i]!=null){
if(s[i].getId()==1){
int newage = s[i].getAge()+1;
s[i].setAge(newage);
//注:不能写s[i].getAge()++
Prints(s);
break;
}
}else{
System.out.println("当前id不存在,修改失败");
}
}*/注:这一步中的两种方法都能够实现该功能
int index2 = GetIndex(s, 1);
if (index2 >= 0) { // 如果找到了指定ID的学生对象
int newage = s[index2].getAge() + 1; // 获取该学生对象的年龄并加1
s[index2].setAge(newage); // 设置该学生对象的年龄为新值
Prints(s); // 打印遍历所有学生信息
}
System.out.println();s 中该学生对象的索引。index2 大于等于 0,表示找到了具有指定ID的学生对象。此时获取该学生对象的年龄并加1,然后更新学生对象的年龄。Prints(s) 方法,打印遍历所有学生信息,显示更新后的数组内容。for (int i = 0; i < s.length; i++) {
if (s[i] != null) { // 检查数组元素不为空
if (s[i].getId() == 1) { // 如果当前学生对象的ID等于1
int newage = s[i].getAge() + 1; // 获取该学生对象的年龄并加1
s[i].setAge(newage); // 设置该学生对象的年龄为新值
Prints(s); // 打印遍历所有学生信息
break; // 结束循环,因为已经找到并修改了目标学生对象
}
} else {
System.out.println("当前id不存在,修改失败");
}
}s 中的每个学生对象。Prints(s) 方法打印更新后的数组内容,并使用 break 结束循环。null,说明对应位置没有学生对象,输出 "当前id不存在,修改失败"。上文中所提到的方法,方法一定要写在主体部分的下方。
//找到id在数组中对应的索引
public static int GetIndex(Students[] s,int id){
for(int i=0;i<s.length;i++){
if(s[i]!=null){
if(s[i].getId()==id){
return i;
}
}
}return -1;
}参数说明:
s 是一个 Students 对象数组,用来存储学生对象。id 是要查找的学生对象的ID。方法逻辑:
for 循环遍历数组 s 中的每个元素。i 处的元素是否为 null,以避免空指针异常。s[i] 不为 null,继续判断 s[i] 的 ID 是否等于输入的 id。s[i].getId() == id),则立即返回当前索引 i。-1,表示未找到对应的学生对象。返回值:
-1。特性:
null 元素,因此在判断 s[i] 是否为 null 时进行了额外的检查,以避免空指针异常。-1 表示未找到指定ID的学生对象,这是一种常见的约定。//遍历数组中的所有学生信息
public static void Prints(Students[] s){
for(int i=0;i<s.length;i++){
if(s[i]!=null){
System.out.println("学号:"+s[i].getId()+"姓名:"+s[i].getName()+"年龄:"+s[i].getAge());
}
}
}方法逻辑:
for 循环遍历数组 s 中的每个元素,从索引 0 到 s.length - 1。if (s[i] != null) 来检查当前索引 i 处的元素是否为 null。s[i] 不为 null,则表示在该位置有一个有效的学生对象,将其相关信息打印出来。s[i].getId()、s[i].getName() 和 s[i].getAge() 分别获取该学生对象的学号、姓名和年龄,并通过 System.out.println 方法打印出来。注:在遍历过程中,通过 s[i] != null 的判断确保只有有效的学生对象被打印,避免了尝试访问空对象可能引发的空指针异常。
//创建新数组,长度=老数组+1
public static Students[] CreateNews(Students[]s){
Students[] news = new Students[s.length+1];
for(int i=0;i<s.length;i++){
news[i] = s[i];
}
return news;
}方法逻辑:
s 的长度创建一个新的数组 news,其长度为 s.length + 1。for 循环遍历输入数组 s 中的每个元素。s 中的每个元素 s[i] 赋值给新数组 news 的相同索引位置 news[i]。news 的前 s.length 个元素与输入数组 s 的元素完全相同。注:这段代码并没有在新数组 news 的最后一个位置(即 news[s.length])添加任何元素或进行其他操作。新数组只是在原有数组的基础上扩展了长度。如果需要在新数组中添加新的元素或对其进行进一步的操作,需要在循环外部或循环内部添加相应的逻辑。
//检查数组中存放了几个数据
public static int getCount(Students[] s) {
int count = 0;
for (int i = 0; i < s.length; i++) {
if (s[i] != null) {
count++;
}
}
return count;
}方法逻辑:
count,用来计数非空元素的数量,初始值为 0。for 循环遍历数组 s 中的每个元素,从索引 0 到 s.length - 1。if (s[i] != null) 检查当前索引 i 处的元素是否不为 null。s[i] 不为 null,则将 count 的值增加 1,表示找到了一个非空元素。count 的值,即数组中非空元素的个数。//根据id判断学生是否存在
public static boolean contains(Students[] s,int t) {
for (int i = 0; i < s.length; i++) {
if(s[i]!=null && s[i].getId()==t){
return true;
}
}
return false;
}方法逻辑:
for 循环遍历数组 s 中的每个元素,从索引 0 到 s.length - 1。if (s[i] != null) 来确保数组当前索引 i 处有一个有效的学生对象。s[i] 不为 null,则进一步判断 s[i].getId() == t 是否成立: s[i].getId() 是获取当前学生对象的ID。t 是传入的目标学生ID。true。false,表示数组中不存在该学生。package day5;
public class text2 {
//主函数
public static void main(String[] args) {
//复杂对象数组练习
//1.创建数组存储学生对象
Students[] s = new Students[3];
//2.创建学生对象
Students s1 = new Students(1, "张三", 18);
Students s2 = new Students(2, "李四", 20);
Students s3 = new Students(3, "王五", 21);
//3.将学生对象添加到数组中
s[0] = s1;
s[1] = s2;
s[2] = s3;
//4.再添加一个学生
Students s4=new Students(4,"VON",18);
boolean flag = contains(s,s4.getId());
if(flag){//id重复
System.out.println("当前id重复,请修改id");
}else{
int count = getCount(s);
if(count==s.length){//已经存满
Students[] news = CreateNews(s);
news[count] = s4;
Prints(news);//遍历所有学生信息
}else{//没有存满
s[count] = s4;
Prints(s);//遍历所有学生信息
}
}
System.out.println();
//找到id在数组中对应的索引
//这一步删除学生的id为2
int index = GetIndex(s,2);//这里是对原数组进行的操作,只有三位同学
if(index>=0){//id存在
s[index] = null;
Prints(s);
}else{//id不存在
System.out.println("当前id不存在,删除失败!");
}
System.out.println();
//5.将id为1的学生年龄加一
//方法一、找到id为1的学生的索引
int index2 = GetIndex(s,1);
if(index2>=0){
int newage = s[index2].getAge()+1;
s[index2].setAge(newage);
Prints(s);
}
System.out.println();
/*方法二、利用循环
for (int i = 0; i < s.length; i++) {
if(s[i]!=null){
if(s[i].getId()==1){
int newage = s[i].getAge()+1;
s[i].setAge(newage);
//注:不能写s[i].getAge()++
Prints(s);
break;
}
}else{
System.out.println("当前id不存在,修改失败");
}
}*/
}
//方法
//找到id在数组中对应的索引
public static int GetIndex(Students[] s,int id){
for(int i=0;i<s.length;i++){
if(s[i]!=null){
if(s[i].getId()==id){
return i;
}
}
}return -1;
}
//遍历数组中的所有学生信息
public static void Prints(Students[] s){
for(int i=0;i<s.length;i++){
if(s[i]!=null){
System.out.println("学号:"+s[i].getId()+"姓名:"+s[i].getName()+"年龄:"+s[i].getAge());
}
}
}
//创建新数组,长度=老数组+1
public static Students[] CreateNews(Students[]s){
Students[] news = new Students[s.length+1];
for(int i=0;i<s.length;i++){
news[i] = s[i];
}
return news;
}
//检查数组中存放了几个数据
public static int getCount(Students[] s) {
int count = 0;
for (int i = 0; i < s.length; i++) {
if (s[i] != null) {
count++;
}
}
return count;
}
//根据id判断学生是否存在
public static boolean contains(Students[] s,int t) {
for (int i = 0; i < s.length; i++) {
if(s[i]!=null && s[i].getId()==t){
return true;
}
}
return false;
}
}package day5;
public class Students {
private int id;
private String name;
private int age;
//空参
public Students() {
}
public Students(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;
}
}