这个代码为什么不能实现成绩相同时,按照名字升序输出?
冬奥会自由式滑雪大跳台决赛的计分规则是:六名裁判给分(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;
}
}