Created
January 21, 2017 04:03
-
-
Save edalorzo/d45ada72160a7d72ebc0b81f9b4b93d6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.Objects; | |
import java.util.Arrays; | |
interface Operand { | |
Operand neg(); | |
Operand add(Int that); | |
Operand add(Decimal that); | |
Operand add(Operand that); | |
Operand mult(Int that); | |
Operand mult(Decimal that); | |
Operand mult(Operand that); | |
Operand sub(Int that); | |
Operand sub(Decimal that); | |
Operand sub(Operand that); | |
} | |
class Int implements Operand { | |
final int value; | |
Int(int value) { this.value = value; } | |
public Int neg(){ return new Int(-this.value); } | |
public Int add(Int that) { return new Int(this.value + that.value); } | |
public Decimal add(Decimal that) { return new Decimal(this.value + that.value); } | |
public Operand add(Operand that) { return that.add(this); } | |
public Int mult(Int that) { return new Int(this.value * that.value); } | |
public Decimal mult(Decimal that) { return new Decimal(this.value * that.value); } | |
public Operand mult(Operand that) { return that.mult(this); } | |
public Int sub(Int that) { return new Int(this.value - that.value); } | |
public Decimal sub(Decimal that) { return new Decimal(this.value - that.value); } | |
public Operand sub(Operand that) { return that.neg().add(this); } | |
public String toString() { return String.valueOf(this.value); } | |
} | |
class Decimal implements Operand { | |
final double value; | |
Decimal(double value) { this.value = value; } | |
public Decimal neg(){ return new Decimal(-this.value); } | |
public Decimal add(Int that) { return new Decimal(this.value + that.value); } | |
public Decimal add(Decimal that) { return new Decimal(this.value + that.value); } | |
public Operand add(Operand that) { return that.add(this); } | |
public Decimal mult(Int that) { return new Decimal(this.value * that.value); } | |
public Decimal mult(Decimal that) { return new Decimal(this.value * that.value); } | |
public Operand mult(Operand that) { return that.mult(this); } | |
public Decimal sub(Int that) { return new Decimal(this.value - that.value); } | |
public Decimal sub(Decimal that) { return new Decimal(this.value - that.value); } | |
public Operand sub(Operand that) { return that.neg().add(this); } | |
public String toString() { return String.valueOf(this.value); } | |
} | |
public class TestDrive { | |
public static void main(String[] args) { | |
Operand a = new Int(10); | |
Operand b = new Int(10); | |
Operand c = new Decimal(10.0); | |
Operand d = new Int(20); | |
Operand x = a.mult(b).mult(c).mult(d); | |
Operand y = b.mult(a); | |
System.out.println(x); //yields 20000.0 | |
System.out.println(y); //yields 100 | |
Operand m = new Int(1); | |
Operand n = new Int(9); | |
Operand q = m.sub(n); | |
Operand t = n.sub(m); | |
System.out.println(q); //yields -8 | |
System.out.println(t); //yeilds 8 | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment