initial- - - 2023-03-09 00:02 采纳率: 86.7%
浏览 134
已结题

Java竞赛排名输出

这个代码为什么不能实现成绩相同时,按照名字升序输出?
冬奥会自由式滑雪大跳台决赛的计分规则是:六名裁判给分(0-100分,整数分数),去掉一个最高分,去掉一个最低分,取平均值作为(除以4.0)参数选手得分(double类型);每位选手可以出场三次,取最高的两次得分和作为该选手的最终总分。

假设有12名选手参加自由式滑雪大跳台决赛,请你编写Java程序,根据每位选手每次出场的得分,计算选手总分,并按照总分降序排列输出选手的基本信息。如果总分相同,则按姓名升序排序。

说明1:字符串s与t比较大小使用s.compareTo(t),若返回值<0,则s串<t串,若返回值>0,则s串>t串,若返回值为0,则s、t串相等。

说明2:计算每次的平均分时记得除以4.0而不是4,否则会视为整除,无法得到正确的结果



import java.util.Scanner;
//六位评委打分,求平均值
public class Main {
  public static void main(String[] args) {
      int[][] arr = new int[3][6];
      Scanner sc = new Scanner(System.in);
      Students [] students = new Students[12];
      for(int j=0;j<12;j++) {
          students[j]=new Students();
          String name= sc.next();
          String nati= sc.next();
          for(int u=0;u<3;u++) 
          { for (int i = 0; i < 6;i++) 
            {    int num = sc.nextInt();
               if(num>=0&&num<=100){ arr[u][i] = num; }
            }
          }
          students[j].setName(name);
          students[j].setNati(nati);
          double []sum = new double[3];double s=0;
          for (int i = 0;i<3;i++){
              //计算一个学生所有科目的范湖
              double[] max =new double[3];max[i]= arr[i][0];
              double []min =new double[3];min[i]= arr[i][0];
              for (int k = 0;k<6;k++){
                  //求一个学生的分数和
                  sum[i]+=arr[i][k];
                  //求一个学生的最高分
                  if (max[i] < arr[i][k]){
                      max [i]= arr[i][k];
                  }
                  //求一个学生的最低分
                  if (min[i] > arr[i][k]){
                      min[i] = arr[i][k];
                  }
              }
                  sum[i]=(sum[i]-min[i]-max[i])*1.0/4.0;
          }double min1=sum[0];
          for(int i=0;i<3;i++) {
              s+=sum[i];if(min1>sum[i])min1=sum[i];
          } s-=min1; 
          students[j].setScore(s);
      }Students temp;
          for(int i=0;i<12;i++)
          {
              for(int j=0;j<11-i;j++)
              {
                  if(students[j+1].getScore()>students[j].getScore())
                  {
                      temp=students[j];students[j]=students[j+1];students[j+1]=temp;
                  }
                  else if(students[j+1].getScore()==students[j].getScore())
                  {   
                      if( students[j].getName(  ).compareTo(  students[j+1].getName(  ))>0)
                      {
                          temp=students[j];students[j]=students[j+1];students[j+1]=temp;
                      }
                  }
              }
          }
          for(int i=0;i<12;i++) {
                    System.out.println(students[i].getName()+","+students[i].getNati()+","+students[i].getScore());
                }
  
}
}
class Students{
    
    private String name;private String nati;private double score;
    public void setName(String name) {
        this.name = name;
    }
    public void setNati(String nati) {
        this.nati = nati;
    }
    public String getName() {
        return name;
    }
    public String getNati() {
        return nati;
    }
    public void setScore(Double score) {
        this.score = score;
    }
    public Double getScore() {
        return score;
    }
}

  • 写回答

5条回答 默认 最新

  • 夜郎king 2022博客之星IT其它领域TOP 12 2023-03-09 08:07
    关注

    在Student中实现排序接口,把名字和分数进行设置就行

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月18日
  • 已采纳回答 6月18日
  • 创建了问题 3月9日