成绩排序
Java使用TreeSet完成学生成绩的排序,实验要求如下:①编写一个Student类,该类至少有name和score成员变量。该类要求实现Comparable接口,在接口的compareTo()方法中规定Student类的两个实例的大小关系为两者的score成员的大小关系。
②编写一个主类StudentFrame,该类继承JFrame,并实现ActionListener接口。分别从两个文本框中输入学生的姓名和成绩,程序按成绩排序将这些学生的姓名和成绩显示在一个文本区中。如下图所示: import java.util.TreeSet;
class Student implements Comparable<Student> {
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
@Override
public int compareTo(Student other) {
return Integer.compare(this.score, other.score);
}
@Override
public String toString() {
return "Name: " + name + ", Score: " + score;
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.TreeSet;
public class StudentFrame extends JFrame implements ActionListener {
private JTextField nameField, scoreField;
private JTextArea displayArea;
private TreeSet<Student> studentSet;
public StudentFrame() {
super("Student Score Sorter");
setLayout(new FlowLayout());
JLabel nameLabel = new JLabel("Name:");
add(nameLabel);
nameField = new JTextField(10);
add(nameField);
JLabel scoreLabel = new JLabel("Score:");
add(scoreLabel);
scoreField = new JTextField(5);
add(scoreField);
JButton addButton = new JButton("Add");
addButton.addActionListener(this);
add(addButton);
displayArea = new JTextArea(10, 20);
add(displayArea);
studentSet = new TreeSet<>();
}
@Override
public void actionPerformed(ActionEvent e) {
String name = nameField.getText();
int score = Integer.parseInt(scoreField.getText());
studentSet.add(new Student(name, score));
displayArea.setText("");
for (Student student : studentSet) {
displayArea.append(student.toString() + "\n");
}
}
public static void main(String[] args) {
StudentFrame frame = new StudentFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
frame.setVisible(true);
}
}
这段代码实现了一个学生成绩排序的程序。首先定义了一个Student类,实现了Comparable接口,根据学生成绩进行比较。然后编写了一个主类StudentFrame,继承自JFrame并实现了ActionListener接口,用于处理用户输入的姓名和成绩,并将学生信息按成绩排序后显示在文本区中。在main方法中创建了一个StudentFrame对象并显示出来。 对于您所描述的Java程序,您需要编写一个简单的学生类和一个继承自JFrame并实现ActionListener接口的主类来完成学生成绩的排序。下面是相应的代码示例:
Student类:
java
import java.util.*;
class Student implements Comparable<Student> {
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
@Override
public int compareTo(Student other) {
return Integer.compare(this.score, other.score);
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
}
StudentFrame类:
java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.TreeSet;
public class StudentFrame extends JFrame implements ActionListener {
private JTextField nameField, scoreField;
private JTextArea displayArea;
private TreeSet<Student> studentSet;
public StudentFrame() {
setTitle("学生成绩排序");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
JLabel nameLabel = new JLabel("姓名:");
add(nameLabel);
nameField = new JTextField(10);
add(nameField);
JLabel scoreLabel = new JLabel("成绩:");
add(scoreLabel);
scoreField = new JTextField(10);
add(scoreField);
JButton addButton = new JButton("添加");
add(addButton);
addButton.addActionListener(this);
displayArea = new JTextArea(10, 20);
add(displayArea);
studentSet = new TreeSet<>();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("添加")) {
String name = nameField.getText();
int score = Integer.parseInt(scoreField.getText());
Student newStudent = new Student(name, score);
studentSet.add(newStudent);
displayStudents();
}
}
private void displayStudents() {
displayArea.setText("");
for (Student student : studentSet) {
displayArea.append(student.getName() + ": " + student.getScore() + "\n");
}
}
public static void main(String[] args) {
StudentFrame frame = new StudentFrame();
frame.setSize(300, 300);
frame.setVisible(true);
}
}
在这个示例中,我们创建了Student类并实现了Comparable接口来定义学生对象的比较规则。然后在StudentFrame类中,我们使用TreeSet来存储Student对象,并通过GUI界面实现了学生成绩的输入和排序显示。当用户点击"添加"按钮时,会将输入的学生姓名和成绩添加到TreeSet中,并实时显示在文本区中,按照成绩排序。 根据您的描述,这个Java实验主要涉及两部分:编写Student类并实现Comparable接口,以及编写StudentFrame主类来处理界面和事件。下面我将分别为这两部分提供代码实现。
### 1. 编写Student类
这个类将包含两个成员变量:name(姓名)和score(成绩)。我们需要让Student类实现Comparable接口,并在compareTo方法中定义比较逻辑,即比较学生的成绩。
public class Student implements Comparable<Student> {
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
// 实现compareTo方法,根据score比较
@Override
public int compareTo(Student other) {
return Integer.compare(this.score, other.score);
}
// Getters and Setters
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;
}
// toString方法,方便打印学生信息
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", score=" + score +
'}';
}
}
### 2. 编写StudentFrame类
StudentFrame类将继承JFrame并实现ActionListener接口。这个类负责创建用户界面,接收用户输入,并显示排序后的学生信息。
import javax.swing.*;
import java.awt.event.*;
import java.util.TreeSet;
public class StudentFrame extends JFrame implements ActionListener {
private JTextField nameField;
private JTextField scoreField;
private JTextArea displayArea;
private TreeSet<Student> students;
public StudentFrame() {
// 初始化组件和容器
students = new TreeSet<>();
nameField = new JTextField(10);
scoreField = new JTextField(10);
displayArea = new JTextArea(10, 30);
JButton addButton = new JButton("添加");
// 设置布局
setLayout(new FlowLayout());
add(new JLabel("姓名:"));
add(nameField);
add(new JLabel("成绩:"));
add(scoreField);
add(addButton);
add(new JScrollPane(displayArea));
// 添加事件监听器
addButton.addActionListener(this);
// 设置窗口属性
setTitle("学生成绩排序");
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
// 处理按钮点击事件
@Override
public void actionPerformed(ActionEvent e) {
try {
String name = nameField.getText();
int score = Integer.parseInt(scoreField.getText());
students.add(new Student(name, score));
displayStudents();
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(this, "请输入有效的成绩!");
}
}
// 显示学生信息
private void displayStudents() {
displayArea.setText("");
for (Student student : students) {
displayArea.append(student + "\n");
}
}
// 主方法,启动程序
public static void main(String[] args) {
new StudentFrame();
}
}
这段代码会创建一个简单的界面,允许用户输入学生的姓名和成绩,并在文本区域中按成绩顺序显示学生信息。
要运行这个程序,您需要在Java环境中编译和运行StudentFrame类。这将启动一个图形用户界面,您可以在其中进行操作。
页:
[1]