package 第六次作业;
public class Member implements Comparable<Member>{
private String id;
private String name;
private int score;
public Member() {
super();
}
public Member(String id, String name, int score) {
super();
this.id = id;
this.name = name;
this.score = score;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "Member [id=" + id + ", name=" + name + ", score=" + score + "]";
}
public int compareTo(Member o) {
// TODO 自动生成的方法存根
return this.score-o.score;
}
}
package 第六次作业;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class 比赛评分排序 {
static Scanner sc =new Scanner( System .in);
static ArrayList<Member> members = new ArrayList<>();
public static void main(String[] args) {
System.out.println("请输入参赛选手个数");
int n = sc.nextInt();
// TODO 自动生成的方法存根
//假设在某次比赛中,有10名评委,对每名参赛选手的评分规则为:
//每名评委在区间[0,10]给出评分,在10个分数中去掉一个最高分,
//去掉一个最低分,平均剩下的8个分数为参赛选手的最终得分。
//一共N名参赛选手,N随机输入,请分析以上要求,
//用所学Java图形用户界面知识,设计一个图形用户界面(GUI)。
// 实现以下基本功能:
// (1)建立两个输入框,用于输入当前参赛选手的编号与姓名;
// (2)建立十个输入框,用于输入评委对参赛选手的评分;
// (3)建立一个输出框,用来显示当前参赛选手的最后得分;
// (4)建立一个输出框,用来显示所有参赛选手的结果并实现排序
JFrame frame = new JFrame("评分排序");
frame.setBounds(300, 200, 500, 400);
frame.setLayout(new BorderLayout());
Panel a1 = new Panel();
a1.setBackground(Color.LIGHT_GRAY);
frame.add(a1,BorderLayout.NORTH);
a1.setLayout(new FlowLayout(FlowLayout.CENTER,50,50));
JLabel b1 = new JLabel("编号:");
TextField c1 = new TextField(20);
JLabel b2 = new JLabel("姓名:");
TextField c2 = new TextField(20);
a1.add(b1);
a1.add(c1);
a1.add(b2);
a1.add(c2);
Panel a2 = new Panel();
a2.setBackground(Color.GRAY);
frame.add(a2,BorderLayout.CENTER);
a2.setLayout(new FlowLayout(FlowLayout.CENTER,55,60));
JLabel b3 = new JLabel("评分1:");
TextField c3 = new TextField(10);
JLabel b4 = new JLabel("评分2:");
TextField c4 = new TextField(10);
JLabel b5= new JLabel("评分3:");
TextField c5 = new TextField(10);
JLabel b6 = new JLabel("评分4:");
TextField c6 = new TextField(10);
JLabel b7 = new JLabel("评分5:");
TextField c7 = new TextField(10);
JLabel b8 = new JLabel("评分6:");
TextField c8 = new TextField(10);
JLabel b9 = new JLabel("评分7:");
TextField c9= new TextField(10);
JLabel b10= new JLabel("评分8:");
TextField c10 = new TextField(10);
JLabel b11 = new JLabel("评分9:");
TextField c11 = new TextField(10);
JLabel b12 = new JLabel("评分10:");
TextField c12= new TextField(10);
a2.add(b3);
a2.add(c3);
a2.add(b4);
a2.add(c4);
a2.add(b5);
a2.add(c5);
a2.add(b6);
a2.add(c6);
a2.add(b7);
a2.add(c7);
a2.add(b8);
a2.add(c8);
a2.add(b9);
a2.add(c9);
a2.add(b10);
a2.add(c10);
a2.add(b11);
a2.add(c11);
a2.add(b12);
a2.add(c12);
//显示所有选手总分
Panel a3 = new Panel();
a3.setBackground(Color.LIGHT_GRAY);
frame.add(a3,BorderLayout.SOUTH);
a3.setLayout(new FlowLayout(FlowLayout.LEFT,110,60));
a3.setPreferredSize(new Dimension(500,300));
Button button = new Button("计算成绩");
button.setSize(5, 5);
a3.add(button);
JLabel b13 = new JLabel("总成绩");
TextField c13 = new TextField(100);
JLabel b14 = new JLabel("总成绩排名");
TextField c14 = new TextField(100);
a3.add(b13);
a3.add(c13);
a3.add(b14);
a3.add(c14);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
for(int i= 0;i<n;i++) {
String id = c1.getText();
String name = c2.getText();
int s1 = Integer.parseInt(c3.getText());
int s2 = Integer.parseInt(c4.getText());
int s3 = Integer.parseInt(c5.getText());
int s4 = Integer.parseInt(c6.getText());
int s5 = Integer.parseInt(c7.getText());
int s6 = Integer.parseInt(c8.getText());
int s7 = Integer.parseInt(c9.getText());
int s8 = Integer.parseInt(c10.getText());
int s9 = Integer.parseInt(c11.getText());
int s10 = Integer.parseInt(c12.getText());
int [] arr = {s1,s2,s3,s4,s5,s6,s7,s8,s9,s10};
int max = arr[0];
int min = arr[0];
int m=0;
int n=0;
for(int j=1;j<arr.length;j++) {
if(arr[j]>max) {
max=arr[j];
m=j;
}
if(arr[j]<min) {
min=arr[j];
n=j;
}
}
arr[m]=0;
arr[n]=0;
int total = 0;
for(int k=0;k<arr.length;k++) {
total+=arr[k];
}
int ave = total/8;
members.add(new Member(id,name,ave));
c1.setText("");
c2.setText("");
c3.setText("");
c4.setText("");
c5.setText("");
c6.setText("");
c7.setText("");
c8.setText("");
c9.setText("");
c10.setText("");
c11.setText("");
c12.setText("");
//c13.setText("编号:"+id+"姓名:"+name+"总成绩:"+ave);
}
c13.setText(members.toString());
Collections.sort(members);
}
});
}
}
在你的代码中,你使用了一个ArrayList来存储参赛选手的成绩。在计算每个选手的最终得分后,你将每个选手的信息存储在ArrayList中。然而,你的问题在于你没有正确地重置ArrayList。
在每次计算完一个选手的最终得分后,你应该重置ArrayList,以便下一个选手的信息可以被正确地存储。在你的代码中,你可以在计算完选手的最终得分后添加以下代码:
members.clear();
这将清空ArrayList,使其为空,以便下一个选手的信息可以被正确地存储。
此外,在显示所有选手的总分之前,你应该先对ArrayList中的选手进行排序。你可以在计算完所有选手的最终得分后添加以下代码:
Collections.sort(members);
这将按照选手的最终得分对ArrayList进行排序。
以下是修改后的代码片段:
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
for(int i= 0;i<n;i++) {
// ...
members.add(new Member(id,name,ave));
c1.setText("");
c2.setText("");
c3.setText("");
c4.setText("");
c5.setText("");
c6.setText("");
c7.setText("");
c8.setText("");
c9.setText("");
c10.setText("");
c11.setText("");
c12.setText("");
// ...
}
c13.setText(members.toString());
Collections.sort(members);
c14.setText(members.toString());
members.clear();
}
});
这样,你就可以在每次计算选手的最终得分后重置ArrayList,并在显示所有选手的总分之前对ArrayList进行排序。