1

わかりましたので、学校では現在、有理数演算を処理できるプログラムを作成する必要があります。コードのこの部分は完全に完了しましたが、割り当ての次の部分は、2 つのカスタム例外クラスを作成することです。最初の例外クラスは簡単に作成でき、null オブジェクト処理クラスだけでした。しかし、私が理解できないクラスは、ゼロクラスによるカスタム除算です。問題は、次のようなクラスの特定のパラメーターがあることです。

Class - DivideByZeroException
Constructors - DivideByZeroException(), DivideByZeroException (Rational rational)
Instance Fields - Rational rational 
Public Methods - Rational getRational() - String getMessage() : override

私が抱えている問題は、クラスが RunTimeException を拡張して super(message) 呼び出しを有効にする必要があるときに getMessage をオーバーライドする必要がある理由がわからないことです。例外をスローできるクラスと例外を処理するクラスのソース コードを次に示します。私が現在試している奇妙なコードがあるかもしれないので、何かが意味をなさない場合は、おそらく私がイライラしていたのでしょう.

package com.math.rational;

public class DivideByZeroException extends RuntimeException
{
    private Rational rational;

    DivideByZeroException()
    {
        super();
    }

    DivideByZeroException(Rational rational)
    {
        super();
        this.rational = rational;
    }

    public Rational getRational()
    {
        try
        {
        return this.rational;
        }
        catch(NullPointerException e)
        {
            e.printStackTrace();
            System.out.println("You have no rational object to retrieve");
            System.exit(1);
            return null;
        }
    }

    @Override
    public String getMessage()
    {
        if(this.rational != null)
        {
            return this.rational.toString();
        }
        else
        {
            return new String("You attempted to divide by zero");
        }
    }
}


package com.math.rational;

public class Rational
{
    private int numerator;
    private int denominator;

    public Rational(int numerator, int denominator)
    {

        try
        {
            this.numerator = numerator;
            this.denominator = denominator;

            int[] intHolder = simplify(this.numerator, this.denominator);
            this.numerator = intHolder[0];
            this.denominator = intHolder[1];

            if ( this.denominator == 0 || denominator == 0)
            {
                System.out.println("true");
                throw new DivideByZeroException(new Rational(this.numerator, this.denominator));
            }   
        }

        catch (DivideByZeroException e)
        {
            System.out.println(e.getMessage());
        }   
    }

    public Rational(Rational numerator, Rational denominator)
    {
        try
        {
        numerator.multiply(denominator.reciprocalNumber());

        if ( numerator.denominator == 0 || denominator.denominator == 0)
        {
            System.out.println("true");
            throw new DivideByZeroException(new Rational(this.numerator, this.denominator));
        }
        }
        catch(DivideByZeroException e)
        {
            System.out.println(e.getMessage());
        }
    }

    public int[] simplify(int tempNumerator, int tempDenominator)
    {
        int reduce = greatestCommon(getAbs(tempNumerator), tempDenominator);

        tempNumerator /= reduce;
        tempDenominator /= reduce;
        int[] size = {tempNumerator, tempDenominator};

        for(int i : size)
        {
            System.out.printf("%s ", i);
        }
        return size;
    }

    public int greatestCommon(int first, int second)
    {
        while(first != second)
        {
            if(first > second)
            {
                first -= second;
            }
            else
            {
                second -= first;
            }
        }

        return first;
    }

    public Rational reciprocalNumber()
    {
        return new Rational(this.denominator, this.numerator);
    }

    public int getAbs(int value)
    {
        return  Math.abs(value);
    }

    public Rational add(Rational other)
    {

        if(other.getDenominator() != this.getDenominator())
        {
            int commonDenom = this.getDenominator() * other.getDenominator();
            int firstNumerator = numerator * other.getDenominator();
            int secondNumerator = other.getNumerator() * this.getDenominator();
            int finalNumerator = firstNumerator + secondNumerator;
            return new Rational(finalNumerator, commonDenom);
        }
        else if(other.getDenominator() == this.getDenominator())
        {
            int finalNumerator = this.getNumerator() + other.getNumerator();
            return new Rational(finalNumerator, this.getDenominator());
        }
        else
        {
            System.out.println("LINE 90 EXECUTED WHICH MEANS SOMETHING IS WRONG");
            return new Rational(this.getNumerator(), this.getDenominator());
        }

    }

    public Rational subtract(Rational other)
    {
        return add(new Rational(-other.numerator, other.denominator));
    }

    public Rational divide(Rational other)
    {
        return multiply(other.reciprocalNumber());
    }

    public Rational multiply(Rational other)
    {
        int newNumerator = this.getNumerator() * other.getNumerator();
        int newDenominator = this.getDenominator() * other.getDenominator();
        return new Rational(newNumerator, newDenominator);
    }

    public int getNumerator()
    {
        return this.numerator;
    }

    public void setNumerator(int numerator)
    {
        this.numerator = numerator;
    }

    public int getDenominator()
    {
        return this.denominator;
    }

    public void setDenominator(int denominator)
    {
        this.denominator = denominator;
    }

    @Override
    public String toString()
    {
        String answer;

        if(denominator == 1)
        {
            answer = numerator + "";
        }
        else
        {
            answer = numerator + "/" + denominator;
        }
        return answer;
    }

}

他の唯一のクラスは、文字通り、値をテストするための単なるドライバー クラスです。

4

1 に答える 1

0

カスタム実行時例外の定義例:

public static int divide(x,y) {
  double result;
  if (y==0) {
     throw new CustomException("Cannot divide by 0");
  }
  else {
     result = x/y;
  }
     return result;
}

public class CustomException extends RuntimeException {
   public CustomException (String errorMsg) {
   super(errorMsg);
}
于 2013-10-18T10:07:36.807 に答える