烦请各位看一下这个程序不知道是哪里错了
结果为什么总输出的是计算的是最后一个人的信息???import java.util.Scanner;
class Student{
String num;
String name;
int age;
char sex;
String major;
String classes;
Course[] course=new Course[5];
}
class Course{
int id;
String name;
int credithour;
int score;
Course(){}
Course(int id,String name,int credithour,int score){
this.id=id;
this.name=name;
this.credithour=credithour;
this.score=score;
}
} class Score{
float aver(Student stu){
float sum=0.0f;
for(int i=0;i<stu.course.length;i++){
sum+=stu.course[i].score;
}
return sum/stu.course.length;

float aver(Course course,Student stu[]){
float sum=0.0f;
for(int i=0;i<stu.length;i++)
sum+=stu[i].course[course.id].score;

return sum/stu.length;

}
}
class ScoreTest{
public static void main(String[] args){
Score score=new Score();
Scanner sc=new Scanner(System.in);
Student[] stu=new Student[3];
Course[] course=new Course[5];
String coursename[]={"计算机导论","操作系统","数据库原理","数据结构","软件工程"};
int credithour[]={3,4,3,4,2};
for(int i=0;i<course.length;i++)
{
course[i]=new Course(i,coursename[i],credithour[i],0);
}
for(int i=0;i<stu.length;i++){
System.out.println("请输入第"+(i+1)+"个学生的信息");
stu[i]=new Student();
System.out.print("学号:");
stu[i].num=sc.next();
System.out.print("姓名:");
stu[i].name=sc.next();
System.out.print("性别:");
stu[i].sex=sc.next().charAt(0);
System.out.print("专业:");
stu[i].major=sc.next();
System.out.print("班级:");
stu[i].classes=sc.next();
for(int j=0;j<course.length;j++){
    stu[i].course[j]=course[j];//觉得这里有问题???
System.out.print("第"+(j+1)+"门课程的成绩:");
stu[i].course[j].score=sc.nextInt();//这里得到的值会不会覆盖前者???
}
System.out.println();
} for(int i=0;i<stu.length;i++){
System.out.println(stu[i].name+"的各科平均成绩:"+score.aver(stu[i]));
}

for(int i=0;i<course.length;i++){
System.out.println(course[i].name+"的平均成绩:"+score.aver(course[i],stu));
}

}
}

解决方案 »

  1.   

    import java.util.Scanner;class Student {
    String num;
    String name;
    int age;
    char sex;
    String major;
    String classes;
    Course[] course = new Course[5];
    }class Course {
    int id;
    String name;
    int credithour;
    int score; Course() {
    } Course(int id, String name, int credithour, int score) {
    this.id = id;
    this.name = name;
    this.credithour = credithour;
    this.score = score;
    }
    }class Score {
    float aver(Student stu) {
    float sum = 0.0f;
    for (int i = 0; i < stu.course.length; i++) {
    sum += stu.course[i].score;
    }
    return sum / stu.course.length;
    } float aver(Course course, Student stu[]) {
    float sum = 0.0f;
    for (int i = 0; i < stu.length; i++)
    sum += stu[i].course[course.id].score; return sum / stu.length; }}public class ScoreTest {
    public static void main(String[] args) {
    Score score = new Score();
    Scanner sc = new Scanner(System.in);
    Student[] stu = new Student[3];
    Course[] course = new Course[5];
    String coursename[] = { "计算机导论", "操作系统", "数据库原理", "数据结构", "软件工程" };
    int credithour[] = { 3, 4, 3, 4, 2 };
    for (int i = 0; i < course.length; i++) {
    course[i] = new Course(i, coursename[i], credithour[i], 0);
    }
    for (int i = 0; i < stu.length; i++) {
    System.out.println("请输入第" + (i + 1) + "个学生的信息");
    stu[i] = new Student();
    System.out.print("学号:");
    stu[i].num = sc.next();
    System.out.print("姓名:");
    stu[i].name = sc.next();
    System.out.print("性别:");
    stu[i].sex = sc.next().charAt(0);
    System.out.print("专业:");
    stu[i].major = sc.next();
    System.out.print("班级:");
    stu[i].classes = sc.next();
    for (int j = 0; j < course.length; j++) {
    stu[i].course[j] = course[j];// 觉得这里有问题???
    System.out.print("第" + (j + 1) + "门课程的成绩:");
    stu[i].course[j].score = sc.nextInt();// 这里得到的值会不会覆盖前者???
    }
    System.out.println();
    } for(int i = 0;i<stu.length;i++) {
    for(int j = 0;j<course.length;j++) {
    System.out.println(stu[i].course[j].score);
    }
    }

    for (int i = 0; i < stu.length; i++) {
    System.out.println(stu[i].name + "的各科平均成绩:" + score.aver(stu[i]));
    } for (int i = 0; i < course.length; i++) {
    System.out.println(course[i].name + "的平均成绩:"
    + score.aver(course[i], stu));
    } }
    }
    都是一个对象
      

  2.   

    都是调用的同一个course
      

  3.   

    for (int i = 0; i < stu.length; i++) {
    System.out.println("请输入第" + (i + 1) + "个学生的信息");
    stu[i] = new Student();
    System.out.print("学号:");
    stu[i].num = sc.next();
    System.out.print("姓名:");
    stu[i].name = sc.next();
    System.out.print("性别:");
    stu[i].sex = sc.next().charAt(0);
    System.out.print("专业:");
    stu[i].major = sc.next();
    System.out.print("班级:");
    stu[i].classes = sc.next();
    //修改
    course = new Course[5];
    for (int m = 0; m < course.length; m++) {
    course[m] = new Course(m, coursename[m], credithour[m], 0);
    }

    for (int j = 0; j < course.length; j++) {
    stu[i].course[j] = course[j];// 觉得这里有问题???
    System.out.print("第" + (j + 1) + "门课程的成绩:");
    stu[i].course[j].score = sc.nextInt();// 这里得到的值会不会覆盖前者???
    }
      

  4.   

    我也意识到了course或许就是来自同一个引用,没想到会是这样
    谢谢!!!