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。OR (||) ではなく XOR (^) にするだけです。

于 2013-03-02T06:15:31.657 に答える
0

問題は、gcd()メソッドが否定的な結果を返す可能性があることです。メソッドを呼び出すと、 andを負の数でsimplified()割り、符号を変更します。これを修正するには、常に肯定的な結果を返すようにメソッドを変更できます。ncgcd()

この行を変更します。

return gcdNum1 + gcdNum2;

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

そして、正しい結果が得られるかどうかを確認します。

于 2013-03-02T06:39:13.267 に答える
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 に答える