当前位置: 首页 > 知识库问答 >
问题:

如何生成一个简化分数的Java方法?

邵凯定
2023-03-14

我写了一个分数类,并与简化有困难。

当我创建分数对象时,一切都很好,我只是觉得我的逻辑由于简化而混乱。

(num和den分别是类中分子和分母的专用变量)

以下是我的GCD和Simplify方法:

/**
 * Returns the absolute value of the greatest common divisor of this
 * fraction's numerator and denominator. If the numerator or denominator is
 * zero, this method returns 0. This method always returns either a positive
 * integer, or zero.
 * 
 * @return Returns the greatest common denominator
 */
private int gcd() {
    int s;
    if (num > den)
        s = den;
    else
        s = num;
    for (int i = s; i > 0; i--) {
        if ((num % i == 0) && (den % i == 0))
            return i;
    }
    return -1;
}

/**
 * Changes this fraction's numerator and denominator to "lowest terms"
 * (sometimes referred to as a "common fraction"), by dividing the numerator
 * and denominator by their greatest common divisor. This includes fixing
 * the signs. For example, if a fraction is 24/-18, this method will change
 * it to -4/3. If the numerator or denominator of the fraction is zero, no
 * change is made.
 */
public void simplify() {

    if (isZero() == false) {// Making sure num or den is not zero.
        this.fixSigns(); // Fix signs first

        if (gcd() > 1) {
            this.num = num / gcd();
            this.den = num / gcd();
        }
    }
}

共有1个答案

孔磊
2023-03-14

我马上看到两件事:对于分子和分母中的每一个,您将num除以gcd()两次。此外,一旦更改分子,则调用gcd()的结果可能会更改。调用“gcd”一次,存储其结果,稍后使用:

int gcd = gcd();
if (gcd > 1) {
   this.num = this.num / gcd;
   this.den = this.den / gcd;
}

此外,还有更有效的获取最大公约数的方法:维基百科页面。参见该页上的欧几里德算法。

 类似资料:
  • 问题内容: 我需要一点帮助。 我将使用什么代码来创建一个5位数长,以1或2开头的随机数? 为了用作公司员工ID? 问题答案: 根据您处理问题的方式,类似以下内容: 或类似的东西(您可能想要实例化该方法的 Random 对象,但是为了简单起见,我将其放在此处): 这个想法是 1 + nextInt(2) 总是给出1或2。然后将其乘以10000以满足您的要求,然后在[0..9999]之间添加一个数字。

  • 本文向大家介绍如何生成一个随机数?相关面试题,主要包含被问及如何生成一个随机数?时的应答技巧和注意事项,需要的朋友参考一下  

  • 我正在使用Locustio对一个web应用程序进行负载测试。我正在使用分布式模式下的locust并使用5个从机攻击5个AWS实例。我注意到,从每个从属服务器创建的负载仅命中5个AWS web服务器中的一个特定web服务器。 > 我想这与负载来自的IP有关…是吗? 这是不是一个很好的方法来设置,比方说50个奴隶,这样分配会更均匀?我想检查Amazon负载均衡器是否能在CPU负载增加时将新请求发送给空

  • 如何自定义生成固定长度的字符串ID,8-12个字符 格式:业务标记_xxxxxxxxxx 如:user_Nuxq23s24dxa1ScSx 要求:1ms生成100W个 或有什么现成的库可以使用,麻烦老大们贴下代码

  • 本文向大家介绍JS简单生成两个数字之间随机数的方法,包括了JS简单生成两个数字之间随机数的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS简单生成两个数字之间随机数的方法。分享给大家供大家参考,具体如下: 运行效果截图如下: 完整代码如下: 更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数学运算用法总结》、《JavaScript中json操作

  • 我有一个脚本,当加入时随机生成一个房间id。我想通过点击一个按钮复制那个ID。这将是一个简单的工作输入元素,然而,我不知道如何目标随机ID编辑和操作它。我怎么能那么做? null null 加入房间时已生成房间ID。我只需要把它拷贝到剪贴板上。添加“createroom”代码。