站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题麻烦大虾们给我的作业改错?

麻烦大虾们给我的作业改错?

摘要: 麻烦大虾们给我的作业改错?


题目大意:
类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{
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//{
//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(){
int t=student[j].getScore();
student[j].getScore()=student[j-1].getScore();
student[j-1].getScore()=t;
}
}
}*/
}

}


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


import java.util.Arrays;

class Student implements Comparable
{
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]);
}
}
}


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


//仍然有错误,请大家指点指点

import java.util.Arrays;
class Student
//implements Comparable
{
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]);
}

}
}


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


你的的程序最大的问题就是编码不规范,


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方法的。


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


在类里面排序?
好奇怪的类啊~~


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型的, 但是你在这里并没有返回任何值啊。是不是这里的问题。


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


我已经改在主方法中来做总分的排序工作,但是仍然有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 {
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());
}

}
}




没有人帮忙给我看看程序的错误之处??


调试成功!
但感觉跟题目意思不符合

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;jSystem.out.println(a[j]);
}
}




↑返回目录
前一篇: 请问一个将字符串转换为long的程序
后一篇: 【感谢】已经学习了java1.4的内容 想看看关于5.0的新特性 又不想在花钱买新书了 大家能不能像个办法