G帅T 2023-04-22 22:30 采纳率: 76%
浏览 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 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加