gpt4 book ai didi

java - 如何对 (int n, int d) 类型的分数数组进行排序

转载 作者:行者123 更新时间:2023-12-02 03:09:54 26 4
gpt4 key购买 nike

公共(public)类分数{

private int num, den;
static double ratio;

public Fraction() {
super();
num = 1;
den = 1;

// TODO Auto-generated constructor stub
}

public Fraction(int num, int den) {
super();
this.num = num;
this.den = den;

}

public int getNum() {
return num;
}

public int getDen() {
return den;
}

public double getRatio() {
return ratio;
}

public void setNum(int num) {
this.num = num;
}

public void setDen(int den) {
this.den = den;
}

public void setRatio(double ratio) {
Fraction.ratio = ratio;
}

public Fraction add(Fraction second)
{
Fraction third = new Fraction();
third.num = this.num * second.den + this.den * second.num;
third.den = this.den * second.den;
return third;
}

public double findratio(double n, double d)
{
ratio = 0;

ratio = n/d;

return ratio;
}

public int findGCD (int n, int d)
{
int gcd = 0, temp = 0;

while (n != 0 && d != 0)
{
temp = n;
n = d % n;
d = temp;
}

gcd = n + d;
return gcd;
}

public void reduce()
{
int gcd = findGCD(num, den);
{
this.num /= gcd;
this.den /= gcd;
}
}

@Override
public String toString()
{
return num + "/" + den;
}

}

导入java.util.*;

公共(public)类测试分数{

private static Fraction frac;
Fraction[] fracs = new Fraction[8];

public static void fillArray()
{
Scanner z = new Scanner(System.in);
Scanner k = new Scanner(System.in);
Fraction[] fracs = new Fraction[8];


for(int i = 0; i < fracs.length - 1; i++)
{
Fraction addt = new Fraction();
Fraction f = new Fraction();
fracs[i] = f;
testFraction.frac = f;
f.setNum(z.nextInt());
f.setDen(k.nextInt());

addt = f.add(fracs[i]);


}
System.out.println(frac);
Arrays.sort(fracs);
System.out.println(Arrays.toString(fracs));

z.close();
k.close();

}




public static void main(String[] args) {

fillArray();



}

}

我有一个 Fraction 类,它定义了分数的 GCD、加法和约减,但我在尝试将这些方法与分数数组一起使用时遇到了困难。此外,我需要将此数组从小到大排序,删除最小和最大,然后将其余的加在一起并减少。

有人有任何提示可以让我走上正轨吗?

最佳答案

基本上,这可以归结为按照Comparator<Fraction>实现compare或compareTo方法。或Comparable<Fraction>接口(interface)。

比较两个 Fraction 的比率对象将是实现合理排序的一种方式1...假设比率已正确计算。如果你想治疗Fraction(1, 2)Fraction(2, 4)如果不相等,那么您可以使用(例如)num 的值当比率相同时作为“平局决胜局”。

一次Fraction实现Comparable<Fraction>或者您已经实现了单独的 Comparator<Fraction>类/实例,然后调用 Arrays.sort(Fraction[])将工作。

<小时/>

您的代码当前处理该比率的方式存在问题。当然,它不应该是 static字段,您不应该能够设置它。当然,它是派生信息,并且应该(仅/始终)从 num 计算得出。和den字段。

确实,如果 Fraction 总体来说会更好被设计为不可变,具有 final字段并且没有 setter 方法。

<小时/>

1。与numdenintratio作为double ,应该有足够的精度来以足够的精度表示比率。如果numdenlong相反,ratio排序的精度不足以在所有情况下工作。

关于java - 如何对 (int n, int d) 类型的分数数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41205200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com