G帅T 2023-04-22 22:30 采纳率: 75.3%
浏览 21
已结题

java中list集合中索引问题


package StuOfMan;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
 
public class Test {
 
    public static void main(String[] args) {
        
        List<Student> list = new ArrayList<>();
        while (true) {
            System.out.println("欢迎使用学生管理系统");
            System.out.print("1:添加学生");
            System.out.print("2:修改学生");
            System.out.print("3:删除学生");
            System.out.print("4:查询学生");
            System.out.print("5:查询所有学生信息");
            System.out.println("6:退出系统");
            System.out.println("输入要操作的选项:");
            Scanner sc = new Scanner(System.in);
            int option = sc.nextInt();
            switch (option) {
            case 1:
                addStu(list);
                break;
            case 2:
                setStu(list);
                break;
            case 3:
                delStu(list);
                break;
            case 4:
                lookStu(list);
                break;
            case 5:
                lookAll(list);
                break;
            case 6:
                System.out.println("已退出系统,欢迎下次使用!");
                return;
 
            default:
                System.out.println("没有该操作选项!");
                break;
            }
        }
}
 
    //输入的方法
    public static String shuRu() {
        Scanner shuRu = new Scanner(System.in);
        return shuRu.nextLine();
    }
    
    //添加学生的方法
    public static void addStu(List<Student> list) {
        System.out.println("输入学生姓名:");
        String sname = shuRu();
        System.out.println("输入学生学号:");
        String sid = shuRu();
        System.out.println("输入学生性别:");
        String sgender = shuRu();
        Student stu = new Student(sname,sid,sgender);
        if(list.contains(stu)) {
            System.out.println("学号重复,程序终止!");
            return;
        }
        if(list.add(stu)) {
            System.out.println("添加成功");
        }
        return;
    }
    
    //修改学生的方法
    public static void setStu(List<Student> list) {
        System.out.println("输入要修改学生的学号:");
        String sid = shuRu();
        int index = list.indexOf(new Student(sid));
        if(index == -1) {
            System.out.println("学号不存在,操作终止!");
            return;
        }
        Student stu = list.get(index);
        System.out.println("请输入新姓名:");
        String name = shuRu();
        stu.setSname(name);
        
        System.out.println("请输入新性别:");
        String gender  = shuRu();
        stu.setSgender(gender);
        System.out.println("修改成功!");
        return;
    }
    
    //删除学生信息
    public static void delStu(List<Student> list) {
        System.out.println("输入要删除学生的学号:");
        String sid = shuRu();
        if(!list.contains(new Student(sid))) {
            System.out.println("学号不存在,操作终止!");
            return;
        }
        if(list.remove(new Student(sid))) {
            System.out.println("删除成功!");
        }
        return;
    }
    
    //查询学生信息
    public static void lookStu(List<Student> list) {
        System.out.println("输入姓名:");
        String sname = shuRu();
        int count = 0;
        for (Student stu : list) {
            if(stu.getSname().equals(sname)) {
                System.out.println(stu);
                count++;
            }
        }
        if(count == 0) {
            System.out.println("系统中未找到姓名为" + sname +"的信息!");
        }
        return;
    }
 
    //查询所有学生的信息
    public static void lookAll(List<Student> list) {
        for (Student stu : list) {
            System.out.println(stu.toString());
        }
    }
}

对于上面的添加方法,它是单独存入数据,然后将数据存入一个对象,再将对象传入list集合里,那么对于修改方法,对于索引,它索引的不应该是对象数据吗,为什么会有索引单独的id数据,整个对象存入集合中不是成为了一个元素吗?难道这个对象存进去,对于索引可以再划分到更小一级吗?注:student类中用了set和get获取id,name,gender值,如何去理解这个索引匹配对象,那个new student(id),如何理解,是传入了一个对象吗,那个对象值仅有一个参数?


package StuOfMan;
 
public class Student {
    private String sname;
    private String sid;
    private String sgender;
    
    public Student() {
        
    }
    
    public Student(String sname, String sid, String sgender) {
        this.sname = sname;
        this.sid = sid;
        this.sgender = sgender;
    }
    
    public Student(String sid) {
        this.sid = sid;
    }
 
    public String getSname() {
        return sname;
    }
 
    public void setSname(String sname) {
        this.sname = sname;
    }
 
    public String getSid() {
        return sid;
    }
 
    public void setSid(String sid) {
        this.sid = sid;
    }
 
    public String getSgender() {
        return sgender;
    }
 
    public void setSgender(String sgender) {
        this.sgender = sgender;
    }
 
    @Override
    public boolean equals(Object obj) {
        Student student = (Student)obj;
        return this.sid.equals(student.sid);
 
    }
 
    @Override
    public String toString() {
        return "[sname=" + sname + ", sid=" + sid + ", sgender=" + sgender + "]";
    }
 
}

补充下student类

  • 写回答

2条回答 默认 最新

  • 守时间的孤岛 2023-04-22 22:34
    关注

    因为你的student类重写了equal方法,并且只比较了id是否相等
    所以那个new student(id),是只传入一个对象就可以比较

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月30日
  • 已采纳回答 4月22日
  • 修改了问题 4月22日
  • 创建了问题 4月22日

悬赏问题

  • ¥15 怎么让数码管亮的同时让led执行流水灯代码
  • ¥20 SAP HANA SQL Script 。如何判断字段值包含某个字符串
  • ¥85 cmd批处理参数如果含有双引号,该如何传入?
  • ¥15 fx2n系列plc的自控成型机模拟
  • ¥15 时间序列LSTM模型归回预测代码问题
  • ¥50 使用CUDA如何高效的做并行化处理,是否可以多个分段同时进行匹配计算处理?目前数据传输速度有些慢,如何提高速度,使用gdrcopy是否可行?请给出具体意见。
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),如何通过环岛的原理及完整代码
  • ¥20 机器学习或深度学习问题?困扰了我一个世纪,晚来天欲雪,能饮一杯无?
  • ¥15 c语言数据结构高铁订票系统
  • ¥15 关于wkernell.PDB加载的问题,如何解决?(语言-c#|开发工具-vscode)