コード例 #1
0
ファイル: Fraction.java プロジェクト: krzyswit2/JSC
  @Override
  public boolean canBeSimplified() {
    if (this.numerator != null && this.denominator != null) {
      if (this.numerator instanceof Number && this.denominator instanceof Number) {
        Number numeratorConverted = (Number) numerator;
        Number denominatorConverted = (Number) denominator;
        if (Operation.isInteger(numeratorConverted.getValue())
            && Operation.isInteger(denominatorConverted.getValue())) {
          ExpressionPart gcd =
              new GreatestCommonDivisor(numeratorConverted, denominatorConverted).simplyfy();
          if (gcd instanceof Number && ((Number) gcd).getValue() > 1) {
            return true;
          }
        } else {
          return true;
        }
      }

      if (denominator instanceof Number) {
        if (((Number) denominator).getValue() == 1) {
          return true;
        }
      }

      if (numerator.canBeSimplified() || denominator.canBeSimplified()) return true;
    }
    return false;
  }
コード例 #2
0
ファイル: Exponentiation.java プロジェクト: krzyswit2/JSC
 @Override
 public ExpressionPart nextStepToSimplyfy() {
   if (base instanceof Number && exponent instanceof Number) {
     return new Number(Math.pow(((Number) base).getValue(), ((Number) exponent).getValue()));
   }
   ExpressionPart tmpbase = base;
   ExpressionPart tmpexponent = exponent;
   if (base.canBeSimplified()) {
     tmpbase = base.nextStepToSimplyfy();
   }
   if (exponent.canBeSimplified()) {
     tmpexponent = exponent.simplyfy();
   }
   return this;
 }
コード例 #3
0
ファイル: ExpressionPart.java プロジェクト: UniqueOne/drools
 @Override
 public int hashCode() {
   int result = prev != null ? prev.hashCode() : 0;
   result = ~~result;
   result = 31 * result + (name != null ? name.hashCode() : 0);
   result = ~~result;
   result = 31 * result + (classType != null ? classType.hashCode() : 0);
   result = ~~result;
   result = 31 * result + (genericType != null ? genericType.hashCode() : 0);
   result = ~~result;
   result = 31 * result + (parametricType != null ? parametricType.hashCode() : 0);
   result = ~~result;
   return result;
 }
コード例 #4
0
ファイル: Exponentiation.java プロジェクト: krzyswit2/JSC
 @Override
 public String toString() {
   return base.toString().concat("^").concat(exponent.toString());
 }
コード例 #5
0
ファイル: Fraction.java プロジェクト: krzyswit2/JSC
  @Override
  public ExpressionPart simplyfy() {
    ExpressionPart tmpNumerator = numerator;
    ExpressionPart tmpDenominator = denominator;

    if (tmpNumerator.canBeSimplified()) {
      tmpNumerator = tmpNumerator.simplyfy();
    }
    if (tmpDenominator.canBeSimplified()) {
      tmpDenominator = tmpDenominator.simplyfy();
    }
    if (tmpNumerator instanceof Number && tmpDenominator instanceof Number) {
      Number numeratorConverted = (Number) tmpNumerator;
      Number denominatorConverted = (Number) tmpDenominator;

      if (Operation.isInteger(numeratorConverted.getValue())
          && Operation.isInteger(denominatorConverted.getValue())) {
        ExpressionPart gcd =
            new GreatestCommonDivisor(numeratorConverted, denominatorConverted).simplyfy();

        if (gcd instanceof Number && ((Number) gcd).getValue() > 1) {
          tmpNumerator = new Division(numeratorConverted, gcd).simplyfy();
          tmpDenominator = new Division(denominatorConverted, gcd).simplyfy();
        }
      } else {
        while (!(Operation.isInteger(numeratorConverted.getValue())
            && Operation.isInteger(denominatorConverted.getValue()))) {
          numeratorConverted = new Number(numeratorConverted.getValue() * 10);
          denominatorConverted = new Number(denominatorConverted.getValue() * 10);
        }
        return new Fraction(numeratorConverted, denominatorConverted).simplyfy();
      }
    }

    if (tmpNumerator instanceof Fraction && tmpDenominator instanceof Fraction) {
      Fraction tmpNumeratorConverted = (Fraction) tmpNumerator;
      Fraction tmpDenominatorConverted = (Fraction) tmpDenominator;
      return new Fraction(
          new Multiplication(tmpNumeratorConverted.numerator, tmpDenominatorConverted.denominator),
          new Multiplication(tmpNumeratorConverted.denominator, tmpDenominatorConverted.numerator));
    }

    if (tmpNumerator instanceof Fraction) {
      Fraction tmpNumeratorConverted = (Fraction) tmpNumerator;
      return new Fraction(
          tmpNumeratorConverted.numerator,
          new Multiplication(tmpNumeratorConverted.denominator, tmpDenominator));
    }

    if (tmpDenominator instanceof Fraction) {
      Fraction tmpDenominatorConverted = (Fraction) tmpDenominator;
      return new Fraction(
          new Multiplication(tmpDenominatorConverted.denominator, tmpNumerator),
          tmpDenominatorConverted.numerator);
    }

    if (tmpDenominator instanceof Number) {
      if (((Number) tmpDenominator).getValue() == 1) {
        return tmpNumerator;
      }
    }

    Fraction retValue = new Fraction(tmpNumerator, tmpDenominator);
    /*retValue.setSign(this.isPositive);
    if(tmpNumerator instanceof Number){
    	if(((Number)tmpNumerator).getValue() < 0){
    		retValue.setSign(false);
    		tmpNumerator = new Number(Math.abs(((Number)tmpNumerator).getValue()));
    		retValue.setSignChecked(true);
    	}
    }*/

    return retValue;
  }
コード例 #6
0
ファイル: ExpressionPart.java プロジェクト: UniqueOne/drools
 public void setNext(ExpressionPart next) {
   this.next = next;
   if (next != null) {
     next.prev = this;
   }
 }
コード例 #7
0
ファイル: ExpressionPart.java プロジェクト: UniqueOne/drools
 public void setPrevious(ExpressionPart prev) {
   this.prev = prev;
   if (prev != null) {
     prev.next = this;
   }
 }