要求:输入专业和班级,输出该班级所有学生的信息。
问题:输入专业和班级,只输出一个学生的信息,不能输出全班人的,如何改进
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) 这里有两个错: