Java中用于比较三个有理数并返回最小数的方法

时间:2014-11-13 04:09:47

标签: java methods

我需要在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())
                     + ")");

我有一种感觉问题可能是我在调用方法时使用的对象,但我不知道其他对象是否合适。任何帮助将不胜感激!

1 个答案:

答案 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