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,添加和减少分数,但是我试图将这些方法与一系列分数一起使用。另外,我需要将这个数组从最小到最大排序,删除最小和最大,然后将其余部分加在一起并减少。
有没有人有任何可能让我走上正轨的提示?
答案 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
字段,你不应该设置它。当然,它是派生的信息,应该(仅/始终)从num
和den
字段计算。
事实上,如果Fraction
设计为不可变,final
字段且没有setter方法,那么整体会更好。
1。由于num
和den
为int
而ratio
为double
,因此应该有足够的精度来表示具有足够准确度的比率。如果num
和den
取而代之的是long
,那么ratio
就没有足够的精确度来使排序在所有情况下都有效。