From a373740014fa8dde951229c66e2dd200ca540940 Mon Sep 17 00:00:00 2001 From: codejava Date: Mon, 13 Apr 2026 10:50:54 +0300 Subject: [PATCH] Upload files to "java/expression" --- java/expression/Max.java | 44 +++++++++++++++++ java/expression/Min.java | 44 +++++++++++++++++ java/expression/Multiply.java | 44 +++++++++++++++++ java/expression/Negate.java | 67 ++++++++++++++++++++++++++ java/expression/OverflowException.java | 10 ++++ 5 files changed, 209 insertions(+) create mode 100644 java/expression/Max.java create mode 100644 java/expression/Min.java create mode 100644 java/expression/Multiply.java create mode 100644 java/expression/Negate.java create mode 100644 java/expression/OverflowException.java diff --git a/java/expression/Max.java b/java/expression/Max.java new file mode 100644 index 0000000..57f24a2 --- /dev/null +++ b/java/expression/Max.java @@ -0,0 +1,44 @@ +package expression; + +import java.math.BigDecimal; +import java.math.BigInteger; + +/** + * @author Doschennikov Nikita (me@fymio.us) + */ +public class Max extends AbstractBinaryOperation { + + public Max(AbstractExpression l, AbstractExpression r) { + super(l, r); + } + + @Override + protected String getOperator() { + return "max"; + } + + @Override + protected int getPriority() { + return 0; + } + + @Override + protected boolean isRightAssoc() { + return false; + } + + @Override + protected int applyInt(int a, int b) { + return Math.max(a, b); + } + + @Override + protected BigInteger applyBi(BigInteger a, BigInteger b) { + return a.max(b); + } + + @Override + protected BigDecimal applyBd(BigDecimal a, BigDecimal b) { + return a.max(b); + } +} diff --git a/java/expression/Min.java b/java/expression/Min.java new file mode 100644 index 0000000..c7af478 --- /dev/null +++ b/java/expression/Min.java @@ -0,0 +1,44 @@ +package expression; + +import java.math.BigDecimal; +import java.math.BigInteger; + +/** + * @author Doschennikov Nikita (me@fymio.us) + */ +public class Min extends AbstractBinaryOperation { + + public Min(AbstractExpression l, AbstractExpression r) { + super(l, r); + } + + @Override + protected String getOperator() { + return "min"; + } + + @Override + protected int getPriority() { + return 0; + } + + @Override + protected boolean isRightAssoc() { + return false; + } + + @Override + protected int applyInt(int a, int b) { + return Math.min(a, b); + } + + @Override + protected BigInteger applyBi(BigInteger a, BigInteger b) { + return a.min(b); + } + + @Override + protected BigDecimal applyBd(BigDecimal a, BigDecimal b) { + return a.min(b); + } +} diff --git a/java/expression/Multiply.java b/java/expression/Multiply.java new file mode 100644 index 0000000..36925cb --- /dev/null +++ b/java/expression/Multiply.java @@ -0,0 +1,44 @@ +package expression; + +import java.math.BigDecimal; +import java.math.BigInteger; + +/** + * @author Doschennikov Nikita (me@fymio.us) + */ +public class Multiply extends AbstractBinaryOperation { + + public Multiply(AbstractExpression l, AbstractExpression r) { + super(l, r); + } + + @Override + protected String getOperator() { + return "*"; + } + + @Override + protected int getPriority() { + return 2; + } + + @Override + protected boolean isRightAssoc() { + return false; + } + + @Override + protected int applyInt(int a, int b) { + return a * b; + } + + @Override + protected BigInteger applyBi(BigInteger a, BigInteger b) { + return a.multiply(b); + } + + @Override + protected BigDecimal applyBd(BigDecimal a, BigDecimal b) { + return a.multiply(b); + } +} diff --git a/java/expression/Negate.java b/java/expression/Negate.java new file mode 100644 index 0000000..2e489ea --- /dev/null +++ b/java/expression/Negate.java @@ -0,0 +1,67 @@ +package expression; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.List; + +/** + * @author Doschennikov Nikita (me@fymio.us) + */ +public class Negate extends AbstractExpression { + + private final AbstractExpression operand; + + public Negate(AbstractExpression operand) { + this.operand = operand; + } + + @Override + public int evaluate(int x) { + return -operand.evaluate(x); + } + + @Override + public int evaluate(int x, int y, int z) { + return -operand.evaluate(x, y, z); + } + + @Override + public int evaluate(List vars) { + return -operand.evaluate(vars); + } + + @Override + public BigInteger evaluateBi(List vars) { + return operand.evaluateBi(vars).negate(); + } + + @Override + public BigDecimal evaluateBd(List vars) { + return operand.evaluateBd(vars).negate(); + } + + @Override + public String toString() { + return "-(" + operand + ")"; + } + + @Override + public String toMiniString() { + if (operand instanceof AbstractBinaryOperation) { + return "-(" + operand.toMiniString() + ")"; + } + return "- " + operand.toMiniString(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!(obj instanceof Negate)) return false; + return operand.equals(((Negate) obj).operand); + } + + @Override + public int hashCode() { + return -operand.hashCode(); + } +} diff --git a/java/expression/OverflowException.java b/java/expression/OverflowException.java new file mode 100644 index 0000000..da9799c --- /dev/null +++ b/java/expression/OverflowException.java @@ -0,0 +1,10 @@ +package expression; + +/** + * @author Doschennikov Nikita (me@fymio.us) + */ +public class OverflowException extends ArithmeticException { + public OverflowException(String operation) { + super("overflow in " + operation); + } +} \ No newline at end of file