题目大意:
类Student有私有变量 ID,name,以及一唯数组score[];
类Student定义带3个参数的构造函数,分别是ID,name,数组的大小maxCourse,并利用随机数生成的办法初始化数组,并计算总分。
题目还要求为该类定义取得和设置name,ID的方法,getName(),getID(),setName(),setID(),以及返回score数组的方法getScore();
再定义测试类TestStudentArray,在main方法体中,创建一个对象数组,对数组中的每一个对象元素,使用new进行对象的创建,参数可以自定,学生的数目和课程数可以定义2个变量maxStudent和maxCourse,都可以定为4。要利用Student类提供的成员方法输出排序前的ID,name以及各科成绩,利用任意一种排序方法进行总成绩的排序,在排序的方法中,比较的是每个学生对象的属性---score[]数组的最后一个元素(总分)的值,交换的是每一个对象元素。最后输出排序后的输出。
我的程序代码如下,但是有点不懂,没法实现它的功能?
欢迎大家给出自己的见解!
class Student
{
private String ID,name;
private float score[];
Student(String ID,String name,int maxCourse)
{
ID=this.ID;
name=this.name;
int i=0;
int[] score=new int[maxCourse];
int[] sum={0};
System.out.print("单科成绩分别是:");
for(i=0;i<maxCourse;i++)
{
score[i]=(int)Math.round(Math.random()*100);
System.out.print(score[i]+" ");
sum[0]=sum[0]+score[i];
}
System.out.println("\t总成绩是:"+sum[0]+" ");

// System.out.println();
// System.out.println("排序前的数组序列:");
// for(i=0;i<score.length;i++)
// {
// System.out.print(score[i]+" ");
// sum[i]=sum[i]+score[i];
// }

// sort(sum);
// System.out.println();
// System.out.print("总成绩排序后是:");
// for(int i=0;i<4;i++)
// System.out.print(sum[i]+" ");
}    String getID()
{
return ID;
}
public String getName()
{
return name;
}
public void setID(String id)
{
ID=id;
}
public void setName(String name)
{
name=this.name;
}
public String toString()
{
return "ID:"+ID+"Name:"+name;
}
void getScore()
{
return ;
}
}
public class TestStudentArray
{
public static void main(String args[])
{
int maxStudent=4,maxCourse=4;
Student[] student=new Student[maxStudent];
student[0]=new Student("0","zhang",maxCourse);
// student[0].toString();
student[1]=new Student("1","wang ",maxCourse);
student[2]=new Student("2","zhao",maxCourse);
  student[3]=new Student("3","Li",maxCourse);
  /* sort(student)
{
for(int i=0;i<4;i++)
{
for(int j=3;j>i;j--)
if(student[j].getScore()<student[j-1].getScore())
{
int t=student[j].getScore();
student[j].getScore()=student[j-1].getScore();
student[j-1].getScore()=t;
}
     }
}*/
  }

}

解决方案 »

  1.   

    构造函数有问题,应该是:
    this.ID=ID;
    this.name=name;
      

  2.   

    import java.util.Arrays;class Student implements Comparable<Student>
    {
    private String ID, name;
    private int score[];
    private int maxCourse;
    private int sum;
    Student(String ID, String name, int maxCourse)
    {
    this.ID = ID;
    this.name = name;
    this.maxCourse = maxCourse;
    score=new int[maxCourse+1];
    for(int i = 0;i < maxCourse; i++)

    score[i] = (int)Math.round(Math.random()*100);
    score[maxCourse] = score[maxCourse] + score[i]; 
    }
    }
    public int compareTo(Student stu)
    {
    return (stu.score[maxCourse] < score[maxCourse] ? 0 : 1);
    }
    String getID()
    {
    return ID;
    }
    public String getName()
    {
    return name;
    }
    public void setID(String id)
    {
    ID=id;
    }
    public void setName(String name)
    {
    name=this.name;
    }
    public String toString()
    {
    String info = "ID:" + ID + " Name:" + name + "信息\n" + "单科成绩:";
    for(int i = 0; i < maxCourse; i++)
    info = info + score[i] + ", ";
    info = info + "\n总成绩:" + score[maxCourse] + "\n";
    return info;
    }
    int[] getScore()
    {
    return this.score;
    }
    }
    class TestStudentArray
    {
    public static void main(String args[])
    {
    int maxStudent=4;
    int maxCourse=4;
    Student[] student=new Student[maxStudent];
    student[0]=new Student("0","zhang",maxCourse);
    student[1]=new Student("1","wang ",maxCourse);
    student[2]=new Student("2","zhao",maxCourse);
    student[3]=new Student("3","Li",maxCourse); 
    System.out.println("排序前:\n-------------------------");
    for(int i = 0; i < maxStudent; i++)
    {
    System.out.println(student[i]);
    }
    Arrays.sort(student);
    System.out.println("按总成绩排名输出:\n-------------------------");
    for(int i = 0; i < maxStudent; i++)
    {
    System.out.println(student[i]);
    }
    }
    }
      

  3.   

    Arrays.sort(student);
    你想用java 自带的排序方法来做,是吧?此处出错,且题目没有要求我用这种方法来做
      

  4.   

    //仍然有错误,请大家指点指点import java.util.Arrays;
    class Student 
    //implements Comparable<Student>
    {
    private String ID, name;
    private int score[];
    private int maxCourse;
    private int sum;
    Student(String ID, String name, int maxCourse)
    {
    this.ID = ID;
    this.name = name;
    this.maxCourse = maxCourse;
    score=new int[maxCourse+1];
    for(int i = 0;i < maxCourse; i++)

    score[i] = (int)Math.round(Math.random()*100);
    score[maxCourse] = score[maxCourse] + score[i]; 
    }
    }
    public int compareTo(Student stu[]) 
    //想在此方法中比较总分的大小,但确有错误,不知道如何做
    {
    for(int i = 0; i < maxCourse; i++)
    {
    for(int j = maxCourse; j>i; j--)
    {
    int  t=stu[i].getScore();
    stu[j].getScore()=stu[j-1].getScore();
    stu[j-1].getScore()=t;
    }
    }

    return stu.score[maxCourse] ;
    }
    String getID()
    {
    return ID;
    }
    public String getName()
    {
    return name;
    }
    public void setID(String id)
    {
    ID=id;
    }
    public void setName(String name)
    {
    name=this.name;
    }
    public String toString()
    {
    String info = "ID:" + ID + " Name:" + name  + "\n单科成绩:";
    for(int i = 0; i < maxCourse; i++)
    info = info + score[i] + ", ";
    info = info + "\n总成绩:" + score[maxCourse] + "\n";
    return info;
    }
    public int getScore() 
    { return score[maxCourse];
    }
    }
    public class TestStudentArray1
    {
    public static void main(String args[])
    {
    int maxStudent=4;
    int maxCourse=4;
    Student[] student=new Student[maxStudent];
    student[0]=new Student("0","zhang",maxCourse);
    student[1]=new Student("1","wang ",maxCourse);
    student[2]=new Student("2","zhao",maxCourse);
    student[3]=new Student("3","Li",maxCourse); 
    System.out.println("排序前:\n-------------------------");
    for(int i = 0; i < maxStudent; i++)
    {
    System.out.println(student[i]);
    }
        
        
    System.out.println("按总成绩排名输出:\n-------------------------");
    for(int i = 0; i < maxStudent; i++)
    {
    System.out.println(student[i]);
    } }
    }
      

  5.   

    有一点我实在无法理解,你的compareTo方法到底有什么用?你定义了它之后根本就没有调用过!!
    而且我看你写的方法,居然想在里面进行排序????compare是“排序”的含义吗????
      

  6.   

    public int compareTo(Student stu[]) 
    //想在此方法中比较总分的大小,但确有错误,不知道如何做
    {
    for(int i = 0; i < maxCourse; i++)
    {
    for(int j = maxCourse; j>i; j--)
    {
    int  t=stu[i].getScore();
    stu[j].getScore()=stu[j-1].getScore();
    stu[j-1].getScore()=t;
    }
    }

    return stu.score[maxCourse] ;
    }
    -------------------------------------------------------------在这里只用比较大小就好了,只用返回-1、0、1就可以,排序的由collections.sort(list)来做,在执行该方法的时候它会回调你重写的compareTo方法的。
      

  7.   

    compareTo 只是一个名字而已,可以改成sort,自己写代码来完成总分的排序,在主方法中调用它。是不是在Student中根本无法完成总分的排序?
      

  8.   

    public int compareTo(Student stu[])
    //想在此方法中比较总分的大小,但确有错误,不知道如何做
    {
    for(int i = 0; i < maxCourse; i++)
    {
    for(int j = maxCourse; j>i; j--)
    {
    int t=stu[i].getScore();
    stu[j].getScore()=stu[j-1].getScore();
    stu[j-1].getScore()=t;
    }
    }
    -------------------------------------------------------
    你的排序的method是返回int型的, 但是你在这里并没有返回任何值啊。是不是这里的问题。
      

  9.   

    stu[j].getScore()=stu[j-1].getScore();
    stu[j-1].getScore()=t;
    上面两个赋值语句是错误的用法,LZ最好再加上一个setScore方法,利用这个方法交换分数值
      

  10.   

    我已经改在主方法中来做总分的排序工作,但是仍然有2个错误,请各位帮忙排查一下:class Student 
    {
    private String ID, name;
    private int score[];
    private int maxCourse;
    private int sum;
    Student(String ID, String name, int maxCourse)
    {
    this.ID = ID;
    this.name = name;
    this.maxCourse = maxCourse;
    score=new int[maxCourse+1];
    for(int i = 0;i < maxCourse; i++)

    score[i] = (int)Math.round(Math.random()*100);
    score[maxCourse] = score[maxCourse] + score[i]; 
    }
    }
    String getID()
    {
    return ID;
    }
    public String getName()
    {
    return name;
    }
    public void setID(String id)
    {
    ID=id;
    }
    public void setName(String name)
    {
    name=this.name;
    }
    public String toString()
    {
    String info = "ID:" + ID + " Name:" + name  + "\n单科成绩:";
    for(int i = 0; i < maxCourse; i++)
    info = info + score[i] + ", ";
    info = info + "\n总成绩:" + score[maxCourse] + "\n";
    return info;
    }
    public int getScore() 
    { return score[maxCourse];
    }
    }
    public class TestStudentArray1
    {
    public static void main(String args[])
    {
    int maxStudent=4;
    int maxCourse=4;
    Student[] student=new Student[maxStudent];
    student[0]=new Student("0","zhang",maxCourse);
    student[1]=new Student("1","wang ",maxCourse);
    student[2]=new Student("2","zhao",maxCourse);
    student[3]=new Student("3","Li",maxCourse); 
    System.out.println("排序前:\n-------------------------");
    for(int i = 0; i < maxStudent; i++)
    {
    System.out.println(student[i]);
    }  
    System.out.println("排序后(按总成绩排序)\n-------------------------");
    for(int j = 0; j < maxStudent; j++)
    {
    for(int i=1;i<maxStudent-j;i++) //用冒泡法排序
         {
         if(student[i].getScore()>student[i+1].getScore())   
         {    int t=0;
          t=student[i].getScore();
          student[i].getScore() = student[i+1].getScore(); //有错误
          student[i+1].getScore()=t; //有错误
         }
         }
    System.out.println(student[j].getScore());
    } }
    }
      

  11.   

    调试成功!
    但感觉跟题目意思不符合class Student 
    {
    private String ID, name;
    private int score[];
    private int maxCourse;
    private int sum;
    Student(String ID, String name, int maxCourse)
    {
    this.ID = ID;
    this.name = name;
    this.maxCourse = maxCourse;
    score=new int[maxCourse+1];
    for(int i = 0;i < maxCourse; i++)

    score[i] = (int)Math.round(Math.random()*100);
    score[maxCourse] = score[maxCourse] + score[i]; 
    }
    }
    String getID()
    {
    return ID;
    }
    public String getName()
    {
    return name;
    }
    public void setID(String id)
    {
    ID=id;
    }
    public void setName(String name)
    {
    name=this.name;
    }
    public String toString()
    {
    String info = "ID:" + ID + " Name:" + name  + "\n单科成绩:";
    for(int i = 0; i < maxCourse; i++)
    info = info + score[i] + ", ";
    info = info + "\n总成绩:" + score[maxCourse] + "\n";
    return info;
    }
    public int getScore() 
    { return score[maxCourse];
    }
    }
    public class TestStudentArray
    {
    public static void main(String args[])
    {
    int maxStudent=4;
    int maxCourse=4;
    int[] a=new int[maxStudent];
    Student[] student=new Student[maxStudent];
    student[0]=new Student("0","zhang",maxCourse);
    student[1]=new Student("1","wang ",maxCourse);
    student[2]=new Student("2","zhao",maxCourse);
    student[3]=new Student("3","Li",maxCourse); 
    System.out.println("排序前:\n-------------------------");
    for(int i = 0; i < maxStudent; i++)
    {
    System.out.println(student[i]);
    }  
    System.out.println("排序后(按总成绩排序)\n-------------------------");
    for(int j = 0; j < maxStudent; j++)
    {
    a[j]=student[j].getScore();
    }
    int i,j,k,t;
    for(i=0;i<3;i++)//用选择法排序
    {
    k=i;
    for(j=i+1;j<4;j++) 
         if(a[k]>a[j]) k=j;  
         {    
         t=0;
         t=a[k];
         a[k]= a[i];
         a[i]=t; 
         }
        } 
        for(j=0;j<maxStudent;j++)
    System.out.println(a[j]);
    }
    }