|  | 
 
10鱼币 
| /*定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。学生的属性:学号,姓名,年龄。 
 要求1:再次添加一一个学生对象,并在添加的时候进行学号的唯一-性判断。
 要求2:添加完毕之后,遍历所有学生信息。
 要求3:通过id删除学生信息
 如果存在,则删除,如果不存在,则提示删除失败。
 要求4:删除完毕之后,遍历所有学生信息。
 要求5:查询数组id为"heima002"的学生,如果存在,则将他的年龄+1岁
 */
 public class Main {
 public static void main(String[] args) {
 //1.创建一个数组来存储学生对象
 Student[] arr = new Student[3];
 //2.创建学生对象
 Student s1 = new Student(1, "阿芬", 20);
 Student s2 = new Student(2, "阿红", 19);
 Student s3 = new Student(3, "蕊蕊", 18);
 //3.把学生对象添加到数组
 arr[0] = s1;
 arr[1] = s2;
 arr[2] = s3;
 
 //要求1:再次添加一一个学生对象,并在添加的时候进行学号的唯一性判断。
 Student s4 = new Student(4, "阿华", 18);
 
 //唯一性判断(定义一个方法)
 //1.已存在---不用添加
 //2.不存在---就可以把学生对象添加到数组
 boolean flag = contains(arr, s4.getId());
 if (flag) {
 //1.已存在---不用添加
 System.out.println("当前id重复,请修改后重新输入");
 } else {
 //2.不存在---就可以把学生对象添加到数组
 
 //把s4添加到数组中
 //1.数组已满---创建一个新的数组,新数组长度=老+1
 //2.数组没有满---直接添加
 int count = getCount(arr);
 if (count == arr.length) {
 //已满
 //创建一个新的数组,长度=老数组+1
 //老数组元素拷贝到新数组当中
 Student[] newArr = creatNewArr(arr);
 //[s1,s2,s3]
 //[s1,s2,s3,null]
 //添加数据
 newArr[count] = s4;
 //要求2:添加完毕之后,遍历所有学生信息。
 printArr(newArr);
 } else {
 /*未满
 [s1,s2,null]
 getCount获取的是2,表示数组中已经有了两个元素
 下一次添加数据,就是添加到2索引的位置
 */
 arr[count] = s4;
 //要求2:添加完毕之后,遍历所有学生信息。
 printArr(arr);
 }
 }
 // 要求3:通过id删除学生信息,如果存在,则删除,如果不存在,则提示删除失败。
 //找到id在数组中对应的索引
 int index = getIndex(arr, 4);
 System.out.println(index);
 }
 
 //我要干嘛? 找到id在数组中的索引
 //我需要什么? 数组 id
 //调用处是否需要继续使用方法的结果? 要
 public static int getIndex(Student[]arr,int id){
 for (int i = 0; i < arr.length; i++) {
 Student s = arr[i];
 if (s != null){
 int sid=s.getId();
 if (sid==id){
 return i;
 }
 }
 }
 return -1;
 }
 
 
 //要求2:添加完毕之后,遍历所有学生信息。
 public static void printArr(Student[] arr) {
 for (int i = 0; i < arr.length; i++) {
 Student s = arr[i];
 if (s != null) {
 System.out.println(s.getId() + " " + s.getAge() + " " + s.getName());
 }
 }
 }
 
 
 //创建一个新的数组,长度=老数组+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++;
 }
 }
 //当循环结束后,就知道数组中有几个元素
 return count;
 }
 
 
 //1.我要干嘛:唯一性判断
 //2.我干这件事需要什么才能完成   数组   Id
 //3.调用处是否需要继续使用方法的结果;只有两种结果
 public static boolean contains(Student[] arr, int id) {
 for (int i = 0; i < arr.length; i++) {
 Student s = arr[i];
 if (s != null) { //获取数组中学生对象的id
 int sid = s.getId();
 //比较
 if (sid == id) {
 return true;
 }
 }
 }
 //当循环结束后,还没有找到一样的,表示查找的id在数组中不存在
 return false;
 }
 }
 
 
同时,在 main 方法中调用 getIndex 方法时,因为判断是否相等时使用了 == 而不是 equals 方法,因此您应该调用 getIndex 方法时传入的参数应该是 int 类型的 4,而不是字符串类型的 "4"。因为 id 在 Student 类中定义是一个 int 类型,不是字符串类型。 
综上所述,您可以按照以下方法进行修改:
 
java
 复制代码public static int getIndex(Student[] arr, int id) {
    for (int i = 0; i < arr.length; i++) {
        Student s = arr[i];
        if (s != null) {
            int sid = s.getId();
            if (sid == id) {
                return i;
            }
        }
    }
    return -1;
}
java
 复制代码// 要求3:通过id删除学生信息,如果存在,则删除,如果不存在,则提示删除失败。
// 找到id在数组中对应的索引
int index = getIndex(arr, 4);
if (index != -1) {
    for (int i = index; i < arr.length - 1; i++) {
        arr[i] = arr[i + 1];
    }
    arr[arr.length - 1] = null;
    //要求4:删除完毕之后,遍历所有学生信息。
    printArr(arr);
} else {
    System.out.println("该学生不存在,无法删除");
}
 | 
 
最佳答案
查看完整内容 同时,在 main 方法中调用 getIndex 方法时,因为判断是否相等时使用了 == 而不是 equals 方法,因此您应该调用 getIndex 方法时传入的参数应该是 int 类型的 4,而不是字符串类型的 "4"。因为 id 在 Student 类中定义是一个 int 类型,不是字符串类型。
综上所述,您可以按照以下方法进行修改:
java
java |