Java实现多个分数(分子和分母由自己在界面中键入)的之间的从小到大以及从大到小的排序操作界面,分数为自己输入。比较分数的大小必须用Comparator<T>接口实现。
时间: 2024-02-28 07:53:18 浏览: 14
好的,这是一个Java程序设计问题。首先,我们需要定义一个Fraction类来表示分数,包含分子和分母两个属性,以及相应的getter和setter方法。然后在界面中,我们可以使用Java Swing来实现输入分数和排序操作的UI界面。
在排序操作中,我们可以使用Collections.sort()方法来进行排序,需要传入一个实现了Comparator<T>接口的比较器对象。我们可以定义两个比较器,一个用于从小到大排序,另一个用于从大到小排序。在比较器中,我们可以比较分数的大小,实现方式可以通过求分数的值,再进行比较,或者通过分子分母的比较来实现。
以下是一个简单的实现示例:
Fraction类:
```java
public class Fraction {
private int numerator; // 分子
private int denominator; // 分母
public Fraction(int numerator, int denominator) {
this.numerator = numerator;
this.denominator = denominator;
}
public int getNumerator() {
return numerator;
}
public void setNumerator(int numerator) {
this.numerator = numerator;
}
public int getDenominator() {
return denominator;
}
public void setDenominator(int denominator) {
this.denominator = denominator;
}
public double getValue() {
return (double)numerator / denominator; // 分数的值
}
@Override
public String toString() {
return numerator + "/" + denominator;
}
}
```
UI界面代码:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class FractionSorter extends JFrame {
private JTextField numeratorField, denominatorField;
private JButton addButton, sortAscButton, sortDescButton;
private JTextArea displayArea;
private List<Fraction> fractionList;
public FractionSorter() {
super("Fraction Sorter");
// 初始化UI组件
numeratorField = new JTextField(5);
denominatorField = new JTextField(5);
addButton = new JButton("Add");
sortAscButton = new JButton("Sort Ascending");
sortDescButton = new JButton("Sort Descending");
displayArea = new JTextArea(10, 20);
fractionList = new ArrayList<>();
// 添加事件监听器
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 获取分子和分母
int numerator = Integer.parseInt(numeratorField.getText().trim());
int denominator = Integer.parseInt(denominatorField.getText().trim());
Fraction fraction = new Fraction(numerator, denominator);
fractionList.add(fraction);
displayArea.append(fraction.toString() + "\n");
}
});
sortAscButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 按从小到大排序
Collections.sort(fractionList, new Comparator<Fraction>() {
@Override
public int compare(Fraction o1, Fraction o2) {
double value1 = o1.getValue();
double value2 = o2.getValue();
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}
});
displayArea.setText("");
for (Fraction fraction : fractionList) {
displayArea.append(fraction.toString() + "\n");
}
}
});
sortDescButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 按从大到小排序
Collections.sort(fractionList, new Comparator<Fraction>() {
@Override
public int compare(Fraction o1, Fraction o2) {
double value1 = o1.getValue();
double value2 = o2.getValue();
if (value1 > value2) {
return -1;
} else if (value1 < value2) {
return 1;
} else {
return 0;
}
}
});
displayArea.setText("");
for (Fraction fraction : fractionList) {
displayArea.append(fraction.toString() + "\n");
}
}
});
// 添加UI组件到窗口
JPanel inputPanel = new JPanel();
inputPanel.add(new JLabel("Numerator:"));
inputPanel.add(numeratorField);
inputPanel.add(new JLabel("Denominator:"));
inputPanel.add(denominatorField);
inputPanel.add(addButton);
JPanel buttonPanel = new JPanel();
buttonPanel.add(sortAscButton);
buttonPanel.add(sortDescButton);
JScrollPane scrollPane = new JScrollPane(displayArea);
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(inputPanel, BorderLayout.NORTH);
contentPane.add(buttonPanel, BorderLayout.CENTER);
contentPane.add(scrollPane, BorderLayout.SOUTH);
pack();
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
FractionSorter sorter = new FractionSorter();
sorter.setVisible(true);
}
}
```
这个程序中,我们使用了匿名内部类来实现了Comparator接口,并通过lambda表达式简化了代码。你可以根据自己的喜好来选择使用哪种方式。