JAVA ArryList为什么键盘录入的数据传不到list集合中

有没有哪位帮忙看看啊,这个我输入的数据好像穿送不到ArrayList集合中,我后面答应list的长度也是0,是哪里出问题了,谢谢。

package www.dzy.com;

import java.util.ArrayList;
import java.util.Scanner;

public class StudentSystem {
    public static void main(String[] args) {
       loop: while (true) {
           ArrayList<Student> list=new ArrayList<>();
            System.out.println("---------欢迎来到学生管理系统----------");
            System.out.println("1.添加学生");
            System.out.println("2.删除学生");
            System.out.println("3.修改学生");
            System.out.println("4.查询学生");
            System.out.println("5.退出系统");
            System.out.println("请输入你的选择:");

            Scanner sc=new Scanner(System.in);
            String choose= sc.next();
            switch (choose)
            {
                case "1":
                    addStudent(list);
                    break;

                case "2":
                    deleteStudent(list);
                    break;
                case "3":
                    updateStudent(list);
                    break;
                case "4":
                   queryStudent(list);
                    break;
                case "5":
                    System.out.println("退出程序");
                    break loop;
                default:
                    System.out.println("您输入错误!!");
                    break;
            }
        }
    }


    public static void addStudent(ArrayList<Student> list)

    {
        Student s=new Student();
       Scanner sc=new Scanner(System.in);



        String id=null;
        while (true) {
            System.out.println("请输入学生的ID");
            id=sc.next();
            boolean flag=contains(list,id);
            if(flag==true){
                System.out.println("您输入的id已经存在,请重新录入");
            }
            else{
                s.setId(id);
                break;
            }
        }

        System.out.println("请输入学生的姓名");
        String name=sc.next();
        s.setName(name);

        System.out.println("请输入学生的年龄");
        int age=sc.nextInt();
        s.setAge(age);

        System.out.println("请输入学生的家庭住址");
        String address=sc.next();
        s.setAddress(address);

        list.add(s);

        System.out.println("学生信息添加成功");
    }

    public static void deleteStudent(ArrayList<Student> list)
    {
        System.out.println("删除学生");
    }

    public static void updateStudent(ArrayList<Student> list)
    {
        System.out.println("修改学生");
    }

    public static void queryStudent(ArrayList<Student> list)
    {



        if (list.size()==0)
        {
            System.out.println("当前无学生信息,请添加后再查询");
            //结束方法
            return;
        }
        //打印表头信息
        System.out.println("id\t\t姓名\t年龄\t家庭住址");
        //当代码执行到这里时,表示集合中是有数据的
        for (int i = 0; i < list.size(); i++)
        {
            Student stu=list.get(i);
            System.out.println(stu.getId()+"\t"+stu.getName()+"\t"+stu.getAge()+"\t"+stu.getAddress());
        }


    }

    public static boolean contains(ArrayList<Student> list,String id)
    {
        for (int i = 0; i < list.size(); i++) {

            Student stu=list.get(i);
            String sid= stu.getId();
            if(sid.equals(id)){
                return true;
            }
        }
        return false;
    }
}


img

img

你的list 在 while(true) 循环里面, 每次进来都是重新创建一个 ArrayList,所以你查询不到新添加的数据

修改: 把 List list=new ArrayList<>(); 放到 while(true) 的上面去

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/389048
  • 除此之外, 这篇博客: javaAPI深入理解(1)如何截短一个List以及List.subList()方法的坑中的 2.2 LinkedList并没有覆盖这个方法.ArryList自己覆盖了这个方法,返回的是java.util.ArrayList.SubList: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •     public List<E> subList(int fromIndex, int toIndex) {
            subListRangeCheck(fromIndex, toIndex, size);
            return new SubList(this, 0, fromIndex, toIndex);
        }
        声明:
        private class SubList extends AbstractList<E> implements RandomAccess {}
    

    看来ArryList处处体现出RandomAccess接口的特性——支持随机访问。

  • 以下回答由chatgpt基于相关博客总结生成:

    问题可能出在数据存入ArrayList集合的过程中。请问你可以提供你的代码或者伪代码吗,这样我可以更好地帮助你解决问题。