定义两个类Student和Course.在Student类中有一个Course的数组,表示学生所选的课程;在Course类里有一个Student数组,表示选了该课程的学生。程序首先要求用户输入课程的数量,然后依此输入所有课程的名称;接着要求用户输入学生的数量,然后依次输入学生的信息。先输入学生的姓名,再输入该生选课的数量,接着输入该生选择的每一门课的名称。在输入的过程中,将信息填入相应的Student和Course对象中。最后打印出每个学生所选的所有的课程列表和每个课程的所有选课的学生的列表。
有同学问我,这道题目,随手写出来的代码,没优化。
package chen;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
class Stu {
private String name;//姓名
private int numberCourse; //选课数量
private String[] myCourse = new String[10]; // 每个人最多10个课程
public Stu(String name, int number, String[] course) {
super();
this.name = name;
this.numberCourse = number;
this.myCourse = course;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void printCourse() {
System.out.println(Arrays.toString(this.myCourse));
// for(int a:array)
// System.out.println(a);
}
}
class Course {
private String name;//姓名
private int numberStu = 0; //学生数量
private String[] myStu = new String[100]; // 每个课最多100个学生
public Course(String name) {
super();
this.name = name;
}
public void addStu(String stuName) {
myStu[numberStu] = stuName;
numberStu++;
}
public String getName() {
return name;
}
public void printStu() {
System.out.println(this.name + "::");
if (numberStu > 0) {
for (int i = 0; i < numberStu; i++) {
System.out.println(myStu[i]);
}
} else {
System.out.println("此课程无人选择!");
}
System.out.println();
// System.out.println(Arrays.toString(this.myStu));
// for(int a:array)
// System.out.println(a);
}
}
//class init {
// public init (){
// System.out.println("初始化...请输入");
// }
//}
public class ChenBaby {
static ArrayList<String> stu_arr_all = new ArrayList<>();
static ArrayList<String> course_arr_all = new ArrayList<>();
static Stu[] stuArr = new Stu[100];
static Course[] courseArr = new Course[100];
static int numberCourse;
static int numberStu;
public static void main(String[] args) {
// 课程输入 初始化 courseArr数组
System.out.println("初始化...请输入所有课程的数量");
Scanner scan = new Scanner(System.in);
numberCourse = scan.nextInt();
System.out.println(numberCourse);
Scanner sc = new Scanner(System.in);
System.out.println("初始化...请输入" + numberCourse + "个名称:");
for (int i = 0; i < numberCourse; i++) {
course_arr_all.add(sc.nextLine());
}
for (int i = 0; i < numberCourse; i++) {
courseArr[i] = new Course(course_arr_all.get(i));
}
// String[] str = sc.nextLine().split(" "); //字符串以空格分割
System.out.println(course_arr_all);
// 学生输入 初始化 stuArr数组
System.out.println("初始化...请输入所有学生的数量");
numberStu = scan.nextInt();
System.out.println(numberStu);
for (int i = 0; i < numberStu; i++) {
System.out.println("初始化...请输入第" + (i + 1) + "个名字,还剩" + (numberStu - i - 1) + "个学生待输入");
String name = sc.nextLine();
stu_arr_all.add(name);
System.out.println("初始化...请输入" + name + "学生选课的数量");
String number = sc.nextLine();
System.out.println("初始化...请输入该学生所有选课的名称");
ArrayList<String> courses = new ArrayList<>();
for (int j = 0; j < Integer.parseInt(number); j++) {
courses.add(sc.nextLine());
}
// 遍历此学生的输入课程 添加学生到课程中
for (String coursesName : courses) {
for (int z = 0; z < numberCourse; z++) {
// System.out.println(courseArr[z].getName());
if (coursesName.equals(courseArr[z].getName())) {
courseArr[z].addStu(name);
}
}
}
Stu stu = new Stu(name, Integer.parseInt(number), courses.toArray(new String[0]));//这个toArray()方法,而不传递任何参数返回Object[]..因此,必须将数组作为参数传递,该数组将被列表中的数据填充并返回。
stuArr[i] = stu;
}
sc.close();
scan.close();
System.out.println("=============初始化成功===============");
System.out.println("=============最爱陈baby===============");
// 输出
for (int i = 0; i < numberStu; i++) {
System.out.println();
System.out.println(stuArr[i].getName() + "的选课是:");
stuArr[i].printCourse();
}
System.out.println();
System.out.println("(::后面是选课学生名::前面是课名)");
for (int i = 0; i < numberCourse; i++) {
courseArr[i].printStu();
}
}
}