JAVA输入专业和班级,只输出一个学生的信息,不能输出全班人的,如何改进

要求:输入专业和班级,输出该班级所有学生的信息。
问题:输入专业和班级,只输出一个学生的信息,不能输出全班人的,如何改进

package managementSystem;
import java.util.ArrayList;
import java.util.Scanner;
public class ccSearch {
    public static void ccSearchStudent(ArrayList<Student> list) {
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入专业:");
        String scollege= sc.next();
        Scanner sc2=new Scanner(System.in);
        System.out.print("请输入班级:");
        String ssclass= sc2.next();
        int index =ccgetIndex.getIndex(list,scollege,ssclass);
        if(index<0){
            System.out.println("专业或班级不存在");
        }else{
            Student st=new Student();
            st=list.get(index);
            System.out.println("学号\t姓名\t性别\t专业\t\t班级\t宿舍号\t出生年月\t家庭住址\t");
            System.out.println(st.getId()+"\t"+st.getName()+"\t"+st.getSex()+"\t"+st.getCollege()+"\t"+st.getSclass()+"\t"+st.getDorm()+"\t"+st.getBirthday()+"\t"+st.getAddress());
        }
    }  
}

package managementSystem;

import java.util.ArrayList;

public class ccIndex {
    public static int getIndex(ArrayList<Student> list, String college,String sclass){        
        //遍历集合
        for (int i = 0; i < list.size(); i++) {
            //得到每一个学生对象
            Student stu = list.get(i);
            //得到每一个学生对象的college和sclass
            String scollege = stu.getCollege();
            String ssclass=stu.getSclass();
            if(scollege.equals(college)&&ssclass.equals(sclass)){
                //如果一样,那么就返回索引
                return i;  
            }
        }
        //当循环结束之后还没有找到,就表示不存在,返回-1.
        return -1;
    }
}

后面想了一下,遇到了第1个满足条件的就return了,就查找了一个
可以再生成个动态数组,箭头指向的return那里,满足条件,就加入进去。
然后再遍历这个动态数组的i值,依次获得学生,但是add会报错

package managementSystem;

import java.util.ArrayList;

public class ccIndex {
    ArrayList<ccIndex> list2 = new ArrayList<>();
    public static int getIndex(ArrayList<Student> list, String college,String sclass){        
        //遍历集合
        for (int i = 0; i < list.size(); i++) {
            //得到每一个学生对象
            Student stu = list.get(i);
            //得到每一个学生对象的college和sclass
            String scollege = stu.getCollege();
            String ssclass=stu.getSclass();
            if(scollege.equals(college)&&ssclass.equals(sclass)){
                //如果一样,那么就返回索引
                return list2.add(i);  
            }
        }
        //当循环结束之后还没有找到,就表示不存在,返回-1.
        return -1;
    }
}

要输出整个班级的学生信息,可以对代码进行一些小改动,可以看下哈,如有帮助给个采纳 谢谢

1.将ccSearch类中的st改为ArrayList类型,并将其初始化为空集合。

2.使用for循环遍历list集合中的所有学生对象,并找出与输入的专业和班级相同的学生对象,将这些学生对象加入到st集合中。

3.如果st集合为空,则表示该班级不存在;否则,则通过遍历st集合输出该班级所有学生的信息。

修改后的ccSearch类如下所示:

package managementSystem;
import java.util.ArrayList;
import java.util.Scanner;
public class ccSearch {
    public static void ccSearchStudent(ArrayList<Student> list) {
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入专业:");
        String scollege= sc.next();
        Scanner sc2=new Scanner(System.in);
        System.out.print("请输入班级:");
        String ssclass= sc2.next();       
        ArrayList<Student> st = new ArrayList<>();//用于存储查找到的学生信息
        for(Student s: list){//遍历list集合中的所有学生对象
            if(s.getCollege().equals(scollege)&&s.getSclass().equals(ssclass)){//判断college和sclass是否与输入的专业和班级相同
                st.add(s);//将符合条件的学生对象加入到st集合中
            }
        }
        if(st.isEmpty()){
            System.out.println("专业或班级不存在");
        }else{
            System.out.println("学号\t姓名\t性别\t专业\t\t班级\t宿舍号\t出生年月\t家庭住址\t");
            for(Student s: st){//遍历st集合输出其中所有学生的信息
                System.out.println(s.getId()+"\t"+s.getName()+"\t"+s.getSex()+"\t"+s.getCollege()+"\t"+s.getSclass()+"\t"+s.getDorm()+"\t"+s.getBirthday()+"\t"+s.getAddress());
            }
        }
    }  
}

修改后的代码中,通过for-each循环遍历list集合中的所有学生对象,判断其college和sclass是否与输入的专业和班级相同,符合条件的学生对象将会被加入到st集合中。最后,如果st集合为空,则表示该班级不存在;否则,通过遍历st集合输出该班级所有学生的信息。

list2.add(i) 这里有两个错:

  1. list2是ccIndex的成员变量,你这个方法是ccIndex的静态方法,静态方法无法直接引用成员变量的。
  2. list2存放的是ccIndex 类型,add的却是int类型,泛型不匹配,所以会报错。