我需要在Java中编写一个比较三个有理数(随机生成)并返回最小和最大数的方法。下面你会看到我写了一个比较方法并返回最大值,另一个比较并返回最小值。
通过以下两种方法,我可以在大多数时间内获得正确的最小值和最大值。但是,每运行一次,我得到INCORRECT min和/或max。我试图比较各种输入数据和结果,以确切地看到错误发生的位置以及为什么它看起来显得随机,但我找不到错误答案之间的任何模式。
为了澄清,程序首先生成三个随机分子和三个随机分母,然后使用这些数字形成有理数(a / b)。然后,完成的程序输出最大值,最小值,总和和平均值(首先是有理数格式,然后是浮点格式)。我的Sum和Average方法每次都给出正确的结果。问题似乎在getMaximum和getMinimum方法中。大约80%的时间程序提供正确的最小值和最大值。
下面你会发现我遇到麻烦的两种方法以及我在主程序中的调用。还有一个我用过的Die类,但是没有问题所以它不包括在内。请让我知道可能导致随机INCORRECT最大和最小输出的原因(特别是在getMaximum和getMinimum方法中)谢谢。
//Method to compare rational numbers and return the largest rational
public Rational getMaximum(Rational r1,Rational r2)
{
float d1, d2, d3;
d1 = (numerator/denominator);
d2 = (r1.getNumerator() / r1.getDenominator());
d3 = (r2.getNumerator() / r2.getDenominator());
if (d1 > d2)
if (d1 > d3)
return new Rational(numerator,denominator);
else
return new Rational(r2.getNumerator(),r2.getDenominator());
else
if (d2 > d3)
return new Rational(r1.getNumerator(),r1.getDenominator());
else
return new Rational(r2.getNumerator(),r2.getDenominator());
}
//Method to compare rational numbers and return the smaller rational
public Rational getMinimum(Rational r1, Rational r2,Rational r3)
{
float d1, d2, d3;
d3 = (r3.getNumerator() / r3.getDenominator());
d1 = (r1.getNumerator() / r1.getDenominator());
d2 = (r2.getNumerator() / r2.getDenominator());
if (d1 < d2)
if (d1 < d3)
return new Rational(r1.getNumerator(),r1.getDenominator());
else
return new Rational(r3.getNumerator(),r3.getDenominator());
else
if (d2 < d3)
return new Rational(r2.getNumerator(),r2.getDenominator());
else
return new Rational(r3.getNumerator(),r3.getDenominator());
}
以下是在主程序中使用它们的地方......
//Compares the float point formats to find the maximum number
MaxNum = RatOne.getMaximum(RatTwo,RatThree);
//Prints the maximum number in rational and float format
System.out.println("Maximum: " + MaxNum + " ("
+ MaxNum.getFloat(MaxNum.getNumerator(),MaxNum.getDenominator())
+ ")");
//Compares the float point formats to find the minumum number
MinNum = RatThree.getMinimum(RatOne,RatTwo,RatThree);
//Prints the minimum number in rational and float format
System.out.println("Minimum: " + MinNum + " ("
+ MinNum.getFloat(MinNum.getNumerator(),MinNum.getDenominator())
+ ")");
我有一种感觉问题可能是我在调用方法时使用的对象,但我不知道其他对象是否合适。任何帮助将不胜感激!
答案 0 :(得分:0)
我怀疑的一个问题是你的Rational类是这样实现的:
public class Rational {
int numerator;
int denominator;
..
int getNumerator() { .. }
int getDenominator() { .. }
}
回想一下,对两个整数进行除法(例如:getNumerator() / getDenominator()
)将消除任何余数。
举个例子,下面的代码将产生3.0而不是3.3333 ......
int x = 10;
int y = 3;
float f = x / y;
System.out.println(f);
更好的实现方法是:
(float)x / y