多个分数的之间的操作,先完成下图分数输入与排序基本功能的程序(分数类的UML图可参考实验三,比较分数的大小必须用Comparable<T>接口或Comparator<T>接口)。
时间: 2024-02-28 13:52:11 浏览: 115
比较几个数的大小并排序
好的,让我给您提供一个可能的Java代码实现:
```
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入分数的个数:");
int n = scanner.nextInt();
Fraction[] fractions = new Fraction[n];
for (int i = 0; i < n; i++) {
System.out.print("请输入第" + (i + 1) + "个分数的分子和分母,用空格隔开:");
int numerator = scanner.nextInt();
int denominator = scanner.nextInt();
fractions[i] = new Fraction(numerator, denominator);
}
Arrays.sort(fractions, new Comparator<Fraction>() {
@Override
public int compare(Fraction o1, Fraction o2) {
return o1.compareTo(o2);
}
});
System.out.println("排序后的分数为:");
for (Fraction fraction : fractions) {
System.out.println(fraction.toString());
}
}
}
class Fraction implements Comparable<Fraction> {
private int numerator; // 分子
private int denominator; // 分母
public Fraction(int numerator, int denominator) {
this.numerator = numerator;
this.denominator = denominator;
simplify(); // 约分
}
private void simplify() {
int gcd = gcd(numerator, denominator); // 求最大公约数
numerator /= gcd;
denominator /= gcd;
}
private int gcd(int a, int b) {
int remainder = a % b;
while (remainder != 0) {
a = b;
b = remainder;
remainder = a % b;
}
return b;
}
@Override
public int compareTo(Fraction o) {
int result = numerator * o.denominator - o.numerator * denominator;
return result == 0 ? denominator - o.denominator : result;
}
@Override
public String toString() {
return numerator + "/" + denominator;
}
}
```
这个程序会先让用户输入要输入的分数的个数,然后再让用户逐个输入每个分数的分子和分母,将这些分数存储在一个`Fraction`类型的数组中。接着,程序使用`Arrays.sort()`方法对这个分数数组进行排序,排序时使用了一个匿名内部类实现了`Comparator`接口,该接口调用了`Fraction`类的`compareTo()`方法进行比较。最后,程序输出排序后的分数数组。
请注意,这个实现方式只是其中一种可能的实现方式,您可以根据自己的需求和实际情况进行调整和优化。
阅读全文