Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- Rational.java
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- public class Rational {
- private int num, denum;
- public Rational(int num, int denum) {
- if(denum == 0) {
- // throw new IllegalArgumentException("Fehler: Nenner ist 0");
- System.out.println("Fehler: Nenner ist 0");
- }
- this.num = num;
- this.denum = denum;
- reduce();
- }
- public Rational(int number) {
- this(number, 1);
- }
- private void reduce() {
- final int gcd = ggT(num, denum);
- num /= gcd;
- denum /= gcd;
- if(denum < 0) {
- denum *= -1;
- num *= -1;
- }
- }
- public /* private */ static int ggT(int a, int b) {
- a = Math.abs(a);
- b = Math.abs(b);
- return b == 0 ? a : a >= b ? ggT(a % b, b) : ggT(b, a);
- }
- public Rational add(Rational o) {
- final int denum = this.denum * o.denum, num1 = this.num * o.denum, num2 = this.denum * o.num;
- return new Rational(num1 + num2, denum);
- }
- public Rational sub(Rational o) {
- final int denum = this.denum * o.denum, num1 = this.num * o.denum, num2 = this.denum * o.num;
- return new Rational(num1 - num2, denum);
- }
- public Rational mul(Rational o) {
- return new Rational(num * o.num, denum * o.denum);
- }
- public Rational div(Rational o) {
- return new Rational(num * o.denum, denum * o.num);
- }
- @Override
- public String toString() {
- return num + "/" + denum;
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- RationalTest.java
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- import java.util.Scanner;
- public class RationalTest {
- public static void main(String[] args) {
- final Scanner sc = new Scanner(System.in);
- final Rational r1 = new Rational(sc.nextInt(), sc.nextInt());
- Rational result = r1;
- int state = 0;
- for(String input = sc.next(), op = null, num = null, denum = null; !input.equals("."); input = sc.next(), state++) {
- switch(state) {
- default:
- state = 0;
- case 0: // read operator
- op = input;
- break;
- case 1: // read next numerator
- num = input;
- break;
- case 2: // read next denumerator and calculate
- denum = input;
- final Rational r2 = new Rational(Integer.parseInt(num), Integer.parseInt(denum));
- if(op.length() != 1) {
- throw new IllegalArgumentException("expected operator, got " + op);
- }
- switch(op.charAt(0)) {
- case '+':
- result = result.add(r2);
- break;
- case '-':
- result = result.sub(r2);
- break;
- case '*':
- result = result.mul(r2);
- break;
- case '/':
- result = result.div(r2);
- break;
- default:
- throw new IllegalArgumentException("unknown operator, expected one of +-*/");
- }
- }
- }
- sc.close();
- System.out.println(result);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment