0

\帮助!我的作业要在今晚 12 点之前完成,我似乎无法让我的程序将负数输出为 -1/4 而不是 1/-4!这让我很沮丧,因为事实是,我不能只在我的数字前面放一个“-”(正如你在下面的程序中看到的,我已经注释掉了)。我尝试将分数设为 -1/4(仅使用这个分数作为示例)位于“public RationalNumber(int...) { 行:你看到我写 *-1 的部分了吗?我在哪里在导致我得到 1/-4 的那一步出错了?这让我很沮丧......提前谢谢。

private int n;
private int d;      
public RationalNumber(int numerator, int denominator) {
    if (denominator == 0) {
        throw new IllegalArgumentException();
    }               
    if (denominator < 0) {
        denominator = denominator * -1;
        numerator = numerator * -1;          
      }
    n = numerator;
    d = denominator;        
    simplified();
}   

public RationalNumber add(RationalNumber rn) {
    int comDenom = d * rn.getDenominator(); 
    int num1 = n * rn.d;
    int num2 = rn.n * d;
    d = comDenom;
    return new RationalNumber(num1 + num2, d);      
}

public RationalNumber subtract(RationalNumber rn) {
    int num1 = n * rn.d;
    int num2 = rn.n * d;
    return new RationalNumber(num1 - num2, d);
}

public RationalNumber multiply(RationalNumber rn) {
    int numer = n * rn.n;
    int denom = d * rn.d;
    return new RationalNumber(numer, denom);
}

public RationalNumber divide(RationalNumber rn) {
    int numer = n * rn.d;
    int denom = d * rn.n;
    return new RationalNumber(numer, denom);
}   

public RationalNumber() {
    n = 0;
    d = 1;
}

public boolean equals(RationalNumber o) {
    return (n == o.getNumerator() && d == o.getDenominator());
}   

public int getDenominator() {
    return d;
}

public int getNumerator() {
    return n;
}   

public String toString() { //Prints everything here.
    if (d == 1) {
        return "" + n;
    }       
    if (n == 0) {
        return "0";
    }
    /*if ((n < 0) || (d < 0)) {
        return "-" + Math.abs(n) + "/" + Math.abs(d);
    }*/
    return n + "/" + d;
}   

private void simplified() {
     if (n != 0) {
         int cDenom = gcd(n, d);
         n = n / cDenom;
         d = d / cDenom;
     }
}   

private int gcd(int gcdNum1, int gcdNum2) {
    while (gcdNum1 != 0 && gcdNum2 != 0) {
        int tempNum = gcdNum2;
        gcdNum2 = gcdNum1 % gcdNum2;
        gcdNum1 = tempNum;
    }
    return gcdNum1 + gcdNum2;
}
4

4 回答 4

1

因为这是家庭作业,所以自己查找和解决问题符合您的最大利益。

这里有一些提示可以帮助您入门:

  • 找出构造函数调用之前和之后的n和的值。dsimplified()

  • 您可以使用 Java IDE 的调试器或使用跟踪打印来执行此操作;即调用System.out.println(...)

于 2013-03-02T06:13:13.960 回答
1

您可以放回方法的注释掉部分toString,只需将其设为 XOR (^) 而不是 OR (||)

于 2013-03-02T06:15:31.657 回答
0
return n + "/" + d;

改成:

return ((n>=0 && d>=0) || (n<0 && d<0))?(""):("-")+Math.abs(n)+"/"+Math.abs(d);

只是一个简单的解决方法。

于 2013-03-02T06:15:48.427 回答
0

问题是该gcd()方法可能返回否定结果。当您调用该simplified()方法时,您将nc与可能的负数相除,然后更改它们的符号。要修复它,您可以更改gcd()方法以始终返回积极的结果。

更改此行:

return gcdNum1 + gcdNum2;

if (gcdNum1 + gcdNum2 < 0) {
    return -(gcdNum1 + gcdNum2);
} else {
    return gcdNum1 + gcdNum2;
}

然后检查你是否得到正确的结果。

于 2013-03-02T06:39:13.267 回答