题目要求:
/*定义一个长度为3的数组,数组存储1-3名学生对象作为初始数据,学生对象的学号,姓名各不相同
* 学生的属性:学号,姓名,年龄
* 要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一判断
* 要求2:添加完毕之后,遍历所有的学生信息
* 要求3:通过id删除学生信息
* 如果存在,则删除如果不存在,则提示删除失败
* 要求4:删除完毕之后,遍历所有学生信息
* 要求5;查询数组id为"heima002"的学生,如果存在,则将他的年龄+1岁*/
代码实现:
创建一个包,新建Student和StudentTest类
Student类中的代码
package test8;
public class Student {
/*定义一个长度为3的数组,数组存储1-3名学生对象作为初始数据,学生对象的学号,姓名各不相同
* 学生的属性:学号,姓名,年龄
* 要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一判断
* 要求2:添加完毕之后,遍历所有的学生信息
* 要求3:通过id删除学生信息
* 如果存在,则删除如果不存在,则提示删除失败
* 要求4:删除完毕之后,遍历所有学生信息
* 要求5;查询数组id为"heima002"的学生,如果存在,则将他的年龄+1岁*/
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类里面的代码
package test8;
/*
* 一开始完成学生的主干,主体要求
* 要求一。添加新的学生信息
* 添加的时候先做唯一性判断,看是否已经存在
* 如果已经存在就不添加了
* 如果没有存满,就添加
* 添加的时候判断是否存满
* 没存满的话直接存入
* 存满的话床架新的数组存入*/
public class StudenttTest {
public static void main(String[]args) {
//1.创建数组
Student[]arr=new Student[3];
//2.创建学生对象
Student s1=new Student(001,"张悦",23);
Student s2=new Student(002,"王欣",24);
Student s3=new Student(003,"刘璐",22);
//3.把学生对象存入数组
arr[0]=s1;
arr[1]=s2;
arr[2]=s3;
//要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断
Student s4=new Student(004,"白白",24);
//添加数组的先决性条件
//唯一性判断
//已存在---不用添加
//不存在---就可以把学生对象添加进数组
boolean flag=contains(arr,s4.getID());
if(flag) {
//已存在----不用添加
System.out.println("当前ID重复,请修改ID后再进行添加");
}else {
//不存在,就可以把学生对象添加到数组中
//把s4添加到数组中
//1.数组已经存满,只能创建一个新的数组,新数组的长度=老数组长度+1
//2.数组没有存满,直接添加
int count=getCount(arr);
if(count==arr.length) {
//已经存满
//创建一个新的数组,长度=老数组的长度+1
//要把老数组里面的元素拷贝到新数组里面
Student[] newArr=creatNewArr(arr);
//[stu1,stu2.stu3]
//[stu1,stu2,stu3,null]
//把s4添加进去
newArr[count]=s4;
//要求2,遍历所有学生信息
printArr(newArr);
}else {
//没有存满
/*
* [stu1,stu2,null]
* getCount 获取到的是2,表示数组当中已经有了两个元素
* 还有一层意思,如果下一次要添加数据,就是添加到2索引的位置*/
arr[count]=s4;
//要求2,遍历所有学生信息
printArr(arr);
}
}
//要求2,遍历所有学生信息 是老数组还是新数组
//要对arr 和newArr都做一个遍历,所以写一个方法
//遇到bug ,要从代码的下往上看
}
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++;
}
}
//当循环结束的时候返回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];
//做一个非空判断
if(stu!=null) {
//获取数组中学生对象的id
int sid=stu.getID();//如果没装满的话就是null,调用的话就会报错,null不能直接使用
//比较
if(sid==ID) {
return true;
}
}
}
//当循环结束之后,还没有找到一样的,那么就表示数组中要查找的id是不存在的
return false;
}
}
运行结果:
对于要求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());
}
}
}
对于要求三的分析:
删去对象的信息容易报错,如果没装满的话就是null,调用的话就会报错,null不能直接使用
所有先进行判断
if(stu!=null) {
//获取数组中学生对象的id
int sid=stu.getID();//如果没装满的话就是null,调用的话就会报错,null不能直接使用
//比较
if(sid==ID) {
return true;
}
}