定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据
学生对象的学号,姓名各不相同。
学生的属性:学号,姓名,年龄。
要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。
要求2:添加完毕之后,遍历所有学生信息。
要求3:通过id删除学生信息,如果存在,则删除,如果不存在,则提示删除失败。
要求4:删除完毕之后,遍历所有学生信息。
要求5:查询数组id为“2”的学生,如果存在,则将他的年龄+1岁
先创建一个学生类JAVAbean
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;
}
}
首先需要一个数组来存储学生对象
Student[] arr = new Student[3]; // 存放3个学生对象
创建学生对象并且添加到数组当中
Student stu1 = new Student(1, "zhangsan", 23); //对应 ID 名字 年龄
Student stu2 = new Student(2, "lisi", 24);
Student stu3 = new Student(3, "wangwu", 25);
arr[0] = stu1;
arr[1] = stu2;
arr[2] = stu3;
需要再添加一个学生对象
首先通过id判断新添加的学生是否存在原数组中
存在:提示 “已存在”
不存在:需要将新学生添加到数组中
但原数组初始化只能存放三个学生数据
Student[] arr = new Student[3];
再判断原数组是否存满
存满:需要创建一个新数组,才能够把新学生数据放进去
没存满:直接把新学生数据填进去
创建方法,用于判断学生存不存在
//返回一个布尔值来判断存不存在 需要用到数组和ID
public static boolean contains(Student[] arr, int id) {
//遍历数组,定义一个stu存放遍历的数据
for (int i = 0; i < arr.length; i++) {
Student stu = arr[i];
if (stu != null) { //对当前索引的数据是否是空值进行一个判断
int sid = stu.getId(); //把当前遍历到学生的id存放在sid中
if (sid == id) { 将sid和获取到的id进行判断,如果一样就返回true 代表存在
return true;
}
}
}
return false; //循环结束代表不存在
}
新建 一个学生对象,调用方法来判断存不存在,存在直接提示“存在”
Student stu4 = new Student(4, "zhaoliu", 26);
boolean flag = contains(arr, stu4.getId());
if (flag) {
System.out.println("存在");
}
如果不存在,我们创建一个方法,判断原数组数据是否存满,没存满直接把stu4塞进去,存满了,我们需要再用一个方法创建一个新数组,新数组包括原数组的内容,再把stu放到新数组里
//这个方法需要返回数组内有几个值
public static int getCount(Student[] arr) {
//定义一个count 累计个数
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] != null) {
count++; //遍历数组,如果当前不是空值,个数就加1
}
}
return count;
}
//方法二,需要返回一个新数组
public static Student[] creatNewArr(Student[] arr) {
//因为数据存满了才需要新数组,所以长度为原数组+1
Student[] newArr = new Student[arr.length + 1];
for (int i = 0; i < arr.length; i++) {
newArr[i] = arr[i]; //将原数组的内容放到新数组,最后返回新数组
}
return newArr;
}
//方法三,遍历数组打印数据
public static void printArr(Student[] arr) {
for (int i = 0; i < arr.length; i++) {
Student stu = arr[i];
if (arr[i] != null) {
System.out.println(stu.getId() + "," + stu.getName() + "," + stu.getAge());
}
}
else { int count = getCount(arr); if (count == arr.length) { Student[] newArr = creatNewArr(arr); newArr[count] = stu4; printArr(newArr); } else { arr[count] = stu4; printArr(arr); }
如果不存在
获取原数组中非空值数据的个数
如果 非空值 = 原数组长度 说明存满,需要一个新数组才能把stu放进去
通过方法得到新数组,然后把stu4放进去
这里count是非空值的个数,如果数组存满了,非空值的个数是3,新数组的长度是4
newArr[count] 就是最后一个索引 ;如果没存满,非控制个数是2
arr[count] 刚好也是原数组剩下的最后一个索引
最后根据情况决定打印新数组或者旧数组
代码此时运行
ID相同
原数组存满
原数组没存满
还需要通过ID删除学生信息,那肯定先要判断数组内有没有这个ID
存在就将其信息删除,不存在就提示“删除失败”
定义一个方法,这个方法可以帮助我们判断需要删除的数据存不存在与数组内,如果存在,需要删除这个信息,就需要这个数据在数组内的索引下标
public static int getIndex(Student[] arr,int id){ for (int i = 0; i < arr.length; i++) { Student stu = arr[i]; if (stu != null){ int sid = stu.getId(); if (sid == id){ return i; } } } //循环结束没找到代表不存在 return -1; }
遍历数组,把id放到sid中,然后把sid和获取到的id(就是要删除的id)进行比较
如果相同说明存在,直接返回 i ,就是这个数据在数组内的索引
如果循环结束,说明要删除的信息不存在,返回一个 -1 ,因为数组索引不存在 -1
后续我们只用对这个数字判断就行
int index = getIndex(arr, 4); if (index >= 0){ arr[index] = null; printArr(arr); }else { System.out.println("当前id不存在,删除失败"); }
判断如果 index >= 0 ,直接把arr[index]变为控制,就是删除这个数据,然后打印数组
如果返回的是-1,说明数组中没这个数据
删除id为4的运行结果
删除ID为2的运行结果
最后一步,查询id为2的学生信息,如果存在,就把年龄+1
我们首先判断这个id存不存在,和上面分析过程一样。
id存在,我们获取到这个id在数组中的数据,然后再获取到age,把age+1放到newAge中
最后把数据打印出来即可
int index = getIndex(arr,3);
if (index >= 0){
Student stu = arr[index];
int newAge = stu.getAge() + 1;
stu.setAge(newAge);
printArr(arr);
}else {
System.out.println("当前id不存在,修改失败");
}
“判断并获取下标和打印数组的方法同前面一样”
修改id为3的运行结果
修改id为4的运行结果
e5c9a94d-bd57-4779-9408-834fe334dc71