*2、通过类和类继承,定义学生基本信息(学号、姓名、性别、年龄),
 * 然后定义学生成绩类(定义为基本信息类的子类),
 * 包括课程门数,每门课程的成绩(用一维数组表示)、
 * 课程名称(用String类型一维数组表示)。
 * 使用学生基本信息类和成绩信息类可实现学生基本信息输入、
 * 成绩输入、学生人数和课程门数由输入决定。
 * 能完成学生成绩表输出(含每门课程成绩,总平均成绩),
 * 学生成绩表按总分从高到低排序输出?
 

解决方案 »

  1.   


    import java.util.Scanner;
    public class student{
    public int sNo,sAge,sNu;
     public String sNa,sSex; 
      student(){
    sNo=28;
    sAge=21;
    sNa="许仙";
    sSex="男";  
      
      }
      student(int no,int age,String na,String sex ){
     sNo=no;
     sAge=age;
     sNa=na;
     sSex=sex;
     }
    public int getsNo(){
    return sNo;
    }
    public int setsNo(int _sNo){
    return sNo=_sNo;
    }
        public String getsNa(){
         return sNa;
        }
        public String setsNa(String _sNa){
         return sNa=_sNa;
        }
        public String getsSex(){
         return sSex;
        }
        public String setsSex(String _sSex){
         return sSex=_sSex;
        }
        public int getsAge(){
         return sAge;
        }
        public int setsAge(int _sAge){
         return sAge=_sAge;
        }
        public static void main(String args[]){
     
    // student s=new student();
     Result r =new Result();
     r.getStudent();

     r.getCourse();
     }

    }
    class Result extends student{
    public int cNo;
    public int score;
    public String cNa;

    Result(){

    }  void getStudent(){

     Scanner in=new Scanner(System.in);
     System.out.print("学号: ");
     sNo=in.nextInt();  
     System.out.print("姓名: ");
     sNa =in.next(); 
     System.out.print("性别: ");
     sSex =in.next();
     System.out.print("年龄: ");
     sAge =in.nextInt();
     
     }  void getCourse(){
     Scanner in=new Scanner(System.in);
     System.out.print("学生人数: ");
      sNu= in.nextInt();
     System.out.print("课程数: ");
     int c1 =in.nextInt();
     if(c1==3){
     System.out.print("课程名: ");
     String cNa1=in.next(); 
      System.out.print("分数: ");
      int score1=in.nextInt();
          System.out.print("课程名: ");
          String  cNa2=in.next(); 
          System.out.print("分数: ");
          int score2=in.nextInt();
           System.out.print("课程名: ");
          String cNa3=in.next(); 
           System.out.print("分数: ");
          int score3=in.nextInt();
      System.out.println("学号: "+sNo+"         姓名: "+sNa+"     性别: "+sSex+"     年龄: "+sAge);
      System.out.println("学生人数: "+sNu+"     课程数: "+c1);
      if(score1>score2 && score1>score3 && score2>score3)
      {
      System.out.println("课程名: "+cNa1+"      分数:"+score1 +"分");
      System.out.println("课程名: "+cNa2+"      分数:"+score2+"分" );
      System.out.println("课程名: "+cNa3+"      分数:"+score3+"分" );
      
     double d=(score1+score2+score3)/3;
     System.out.println(sNa+"的平均成绩: "+d+"分");
     }else if(score2>score1 && score2>score3 && score1>score3)
     {
     
      System.out.println("课程名: "+cNa2+"      分数:"+score2+"分" );
      System.out.println("课程名: "+cNa1+"      分数:"+score1 +"分");
      System.out.println("课程名: "+cNa3+"      分数:"+score3+"分" );
      
     double d=(score1+score2+score3)/3;
     System.out.println(sNa+"的平均成绩: "+d+"分");
     }else if(score2>score1 && score2>score3 && score3>score1)
     {
     
      System.out.println("课程名: "+cNa2+"      分数:"+score2+"分" );
      System.out.println("课程名: "+cNa3+"      分数:"+score3+"分" );
      System.out.println("课程名: "+cNa1+"      分数:"+score1 +"分");
      
      
     double d=(score1+score2+score3)/3;
     System.out.println(sNa+"的平均成绩: "+d+"分");
     }
     else if(score3>score1 && score3>score2 && score2>score1)
     {
      System.out.println("课程名: "+cNa3+"      分数:"+score3+"分" );
      System.out.println("课程名: "+cNa2+"      分数:"+score2+"分" );
      System.out.println("课程名: "+cNa1+"      分数:"+score1 +"分");

      
     double d=(score1+score2+score3)/3;
     System.out.println(sNa+"的平均成绩: "+d+"分");
     } else if(score3>score1 && score3>score2 && score1>score2)
     {
      System.out.println("课程名: "+cNa3+"      分数:"+score3+"分" );
      System.out.println("课程名: "+cNa1+"      分数:"+score1 +"分");
      System.out.println("课程名: "+cNa2+"      分数:"+score2+"分" );


      
     double d=(score1+score2+score3)/3;
     System.out.println(sNa+"的平均成绩: "+d+"分");
     }
        

                //System.out.print("课程名:"+cNa);
        
       // System.out.println(sAge);
             
       
     }  }
    }

    我用了最愚蠢的方法做了,我想知道我这样做的格式对不对?
    问题1:有时候好郁闷,不知道弄那么多个setName方法然后return出来这些有什么用..
    问题2:哪位高手可以告诉下我数组输入后怎么存,以这个题目为例,我要输入5个课程,会出现5个输入的操作,最后能全部输出显示出来..
    我之前输入后输出的都只是最后一个数,不能把输入的全部输出..求高手讲解!新手拜托了!
      

  2.   

    public class Basic {
    private int id;
    private String name;
    private String sex;
    private int age;
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getSex() {
    return sex;
    }
    public void setSex(String sex) {
    this.sex = sex;
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }
    }public class Record extends Basic{
    private int count=0;//课程门数
    private Map<String,Double> records=new HashMap<String,Double>();//课程的成绩
    private String courseName;//课程的名字
    public Map<String, Double> getRecords() {
    return records;
    }
    public void setRecords(Map<String, Double> records) {
    this.records = records;
    }
    public int getCount() {
    return count;
    }
    public void setCount(int count) {
    this.count = count;
    }
    public String getCourseName() {
    return courseName;
    }
    public void setCourseName(String courseName) {
    this.courseName = courseName;
    }
    public static void main(String[] args){
    Scanner sc=new Scanner(System.in);
    System.out.println("请输入学生的人数:");
    int studentCount=sc.nextInt();
    for(int i=1;i<=studentCount;i++){
    Record r=new Record();
    System.out.println("请输入"+i+"学生的学号:");
    int id=sc.nextInt();
    System.out.println("请输入"+i+"学生的姓名:");
    String name=sc.next();
    System.out.println("请输入"+i+"学生的性别:");
    String sex=sc.next();
    System.out.println("请输入"+i+"学生的年龄:");
    int age=sc.nextInt();
    System.out.println("请输入"+i+"学生有几门课程:");
    int count=sc.nextInt();
    for(int j=1;j<=count;j++){
    r.setId(id);
    r.setName(name);
    r.setSex(sex);
    r.setAge(age);
    r.setCount(count);
    System.out.println("请输入第"+j+"门课程名:");
    String courseName=sc.next();
    r.setCourseName(courseName);
    System.out.println("请输入第"+j+"门课程成绩:");
    Double record=sc.nextDouble();
    HashMap<String,Double> map=new HashMap<String,Double>();
    r.getRecords().put(courseName, record);
    }
    System.out.println("姓名:"+r.getName());
    Set<Entry<String,Double>> set=r.getRecords().entrySet();
    Entry[] array = r.getRecords().entrySet().toArray(new Entry[set.size()]);
    Arrays.sort(array,new Comparator<Object>(){
    @Override
    public int compare(Object o1, Object o2) {
    double value1=Double.parseDouble(((Entry)o1).getValue().toString());
    double value2=Double.parseDouble(((Entry)o2).getValue().toString());
    return value1>value2?0:value1<value2?1:-1;  
    }

    });
    System.out.println("各科成绩:"+Arrays.toString(array));
    Double sum=0D;
    for(Double record:r.getRecords().values()){
    sum+=record;
    }
    System.out.println("总分:"+sum);
    System.out.println("平均分:"+sum/set.size());
    }
    }
    }
    还真有点绕,我个人觉得课程名称用Map更好,因为输出各科成绩的时候不能只输分数吧
      

  3.   

    [Quote=引用 4 楼 bohe_198878 的回复:]
    好多的错误啊..
    怎么没有主方法的?
      

  4.   

    问题1:这个貌似没必要return,函数改为void类型就可以啊