题目要求:

/*定义一个长度为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;
        		 }
    		 }