有两个类,课程类和学生类。在学生类中定义一个Set表,用来保存选择的课程。代码如下:
课程类:
public class Course {
public int id;
public String name;
public Course(int id,String name){
this.id = id;
this.name = name;
}
public Course(){
}
}
学生类:
import java.util.HashSet;
import java.util.Set;
public class Student {
public int number;
public String name;
public Set<Course> SelectCourse ;
//SelectCourse里面存放的是学生选择的课程信息
public Student(int number,String name){
this.number = number;
this.name = name;
this.SelectCourse = new HashSet<Course>();
}
public Student(){
}
}
主类SetTest
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class SetTest {
public static List<Course> listCourse ;
public SetTest(){
listCourse = new ArrayList<Course>();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SetTest ST = new SetTest();
ST.AddDatelist();
ST.ShowList();
Student stu = new Student(1,"Toms");
Scanner inputs = new Scanner(System.in);
System.out.println("欢迎学生"+stu.name+"来选课");
for(int i=0;i<3;++i){
System.out.println("请输入选择课程的ID:");
int SelectId = inputs.nextInt();
for (Object temp1 : listCourse) {
Course temp = (Course)temp1;
if(SelectId==temp.id){ //若要选择的课程在课程表中存在,则加入到学生的课程中去
stu.SelectCourse.add(temp);
break;
}
}
}
ST.showStudentCourse(stu);
// ST.AddStudentCourse();
}
public void showStudentCourse(Student st){
System.out.println("学生:"+st.name+"选择了"+st.SelectCourse.size()+"门课。");
for(Course cs : st.SelectCourse){
System.out.println("课程号:"+cs.id+",课程名:"+cs.name);
}
}
/**
* 函数AddDateList的作用是往list数组Course中添加课程信息
*
*/
public void AddDatelist(){
Course cr = new Course(1,"语文");
listCourse.add(cr);
Course cr2 = new Course(2,"数学");
listCourse.add(0,cr2);
Course[] crs = {new Course(3,"英语"),new Course(4,"历史"),new Course(5,"政治")};
listCourse.addAll(Arrays.asList(crs));
}
/**
* 函数ShowList的作业是显示课程数组Course的信息
*/
public void ShowList(){
// for(Course temp : listCourse){ //可能的出错点
for(Object temp1 : listCourse){
Course temp = (Course)temp1;
System.out.println(temp.id+":"+temp.name);
}
}
/**
* AddStudentCourse是为学生类添加课程信息
*/
/*
* AddStudentCourse,本类的目的是为学生添加课程,并显示课程。但是运行时,总是会出现指针异常!暂时未找出解决方案。
*/
public void AddStudentCourse(){
Student student = new Student();
// SetTest STest = new SetTest();
student.name = "小明";
student.number = 942;
System.out.println("***欢迎"+student.name+"同学来到选课系统");
System.out.println("**可选择的书如下所示:");
this.AddDatelist();
this.ShowList(); //显示书单信息
// System.out.println("");
System.out.println("**你需要选择四门课");
Scanner inputnumber = new Scanner(System.in);
// int number;
for(int i=0;i<4;++i){
System.out.println("**请输入课程号:");
int number= inputnumber.nextInt();
for(int j=0;j<listCourse.size();j++){
// for(Object temp1 : listCourse){ //判断所选序号是不是在书单里面
Course temp = (Course)listCourse.get(i);
if(number==temp.id){
student.SelectCourse.add(temp);
break;
}
}
}
System.out.println("**你选择的书单为:");
System.out.println(student.SelectCourse.size());
// Course stu = new Course(1,"");
for( Object stu1 : student.SelectCourse){
Course stu = (Course)stu1;
System.out.println(stu.id+":"+stu.name);
}
}
}
在SetTest中给学生添加课程时,原本想使用下面的AddStudentCourse()来为学生添加课程,但是运行时总是异常,指针异常,所以最后换了一种方式,没有调用AddStudentCourse()来为学生添加课程。