2016-10-20 7 views
1

私のRationalクラスは分数を加算、減算、乗算、および除算することになっているので、メインクラスで呼び出されると、これらの動作が実行されます。しかし、正しい答えを得るために分数(gcd)を適切に減らすことができず、分割方法がまったく実行されていない(エラーメッセージが表示されます)。Rational Class - 分数と分裂を減らすことができません

スレッド "main" javaの例外。 lang.ArithmeticException:/ by zero Rational.division(Project1.java:45)at Project1.main(Project1.java:12)

これらの問題を解決するにはどうすればよいですか?合理おかげ

パブリッククラスProject1の{

public static void main(String[] args) { 

    Rational a = new Rational (6, 12); 
    Rational b = new Rational (8, 9); 

    System.out.println(a + " + " + b + " = " + a.add(b)); 
    System.out.println(a + " - " + b + " = " + a.subtraction(b)); 
    System.out.println(a + " * " + b + " = " + a.multiply(b)); 
    System.out.println(a + "/" + b + " = " + a.division(b)); 
} 

}

クラス{

private int numerator, denominator; 

public Rational(int num, int denom) { 
    numerator = num; 
    denominator = denom; 
} 
public Rational gcd() { 
    while (numerator != denominator) 
    { 
     if (numerator > denominator) 
      numerator = numerator - denominator; 
     else 
      denominator = denominator - numerator; 
    } 
    return new Rational(numerator, denominator); 
} 

public Rational add(Rational o) { 
    return new Rational (numerator + o.numerator, denominator +o.denominator); 
} 

public Rational conjugate() { 
    return new Rational (numerator, - denominator); 
} 

public Rational division(Rational o) { 
    return new Rational ((numerator/denominator)/(numerator/denominator), denominator); 
} 

public Rational multiply(Rational o) { 
    return new Rational (numerator * o.numerator, denominator * o.denominator); 
} 

public Rational subtraction(Rational o) { 
    return new Rational (numerator - o.numerator, denominator - o.denominator); 
} 

public String toString() { 
    return (numerator + "/" + denominator); 
} 

}

答えて

1

あなたが持っている問題はここにある:

あなたのコードを実行すると0

あなたはない:

(6/12)/(6/12) 

どちらも(6/12)の括弧内は0にdowncastedされ、したがって、あなたが許可されていません0によってダイビングを終わります。

私は、System.out.println()でコードをデバッグすることをお勧めします。しかし、エラーはかなり明確で、0で割っています。

0

私はあなたの分割方法のロジックを変更します。分数を計算するために分ける必要はありません。ゼロで割っている状況を避けることができます。代わりに、私は2つの画分を分割するためにこれを行うだろう:私はこれがあなたに無限ループを引き起こしている推測しているよう

return new Rational (numerator * o.denominator, o.numerator * denominator); 

また、私は本当に、あなたのGCD関数のロジックに従っていません。助けが必要な場合はユークリッドのアルゴリズムを見てください。

0

プライベートint型の分子、分母; //この値は0

あなたは

public Rational division(Rational o) { 
    return new Rational ((numerator/denominator)/(numerator/denominator), denominator); 
} 

代わりのobject o

で使用しているのと同じ
関連する問題