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

时间:2016-12-18 03:30:35

标签: java arrays sorting reduce

public class Fraction {

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;
}

}

import java.util。*;

public class testFraction {

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,添加和减少分数,但是我试图将这些方法与一系列分数一起使用。另外,我需要将这个数组从最小到最大排序,删除最小和最大,然后将其余部分加在一起并减少。

有没有人有任何可能让我走上正轨的提示?

1 个答案:

答案 0 :(得分:2)

基本上,这归结为根据Comparator<Fraction>Comparable<Fraction>接口实现compare或compareTo方法。

比较两个Fraction对象的比率将是 1 以实现合理排序的方式...假设已正确计算比率。如果您想将Fraction(1, 2)Fraction(2, 4)视为不相等,那么您可以使用(例如)num的值作为&#34;平局断路器&#34;当比率相同时。

一旦Fraction实施Comparable<Fraction>或您实施了单独的Comparator<Fraction>类/实例,就可以调用Arrays.sort(Fraction[])

您的代码目前处理该比率的方式存在问题。当然,它不应该是static字段,你不应该设置它。当然,它是派生的信息,应该(仅/始终)从numden字段计算。

事实上,如果Fraction设计为不可变final字段且没有setter方法,那么整体会更好。

1。由于numdenintratiodouble,因此应该有足够的精度来表示具有足够准确度的比率。如果numden取而代之的是long,那么ratio就没有足够的精确度来使排序在所有情况下都有效。