]> git.llucax.com Git - z.facultad/75.62/c2tp1.git/blob - src/Fraccion.java
Yo sabia que Java era groso :P
[z.facultad/75.62/c2tp1.git] / src / Fraccion.java
1 import java.util.*;
2
3 public class Fraccion extends Observable implements OperFrac, ComparaFrac {
4
5     private int num;
6     private int den;
7
8     public int getNum() {
9         return num;
10     }
11
12     public int getDen() {
13         return den;
14     }
15
16     public void setNum(int n) {
17         num = n;
18                                 setChanged ();
19                                 notifyObservers ();
20     }
21
22     public void setDen(int d) {
23         den = d;
24                                 setChanged ();
25                                 notifyObservers ();
26     }
27
28     public Fraccion() {
29         setNum(1);
30         setDen(1);
31     }
32
33     public Fraccion(int num, int den) throws CeroDenExc {
34         if (den == 0)
35             throw new CeroDenExc(num);
36         setNum(num);
37         setDen(den);
38         normalizar();
39     }
40
41     public Fraccion(Fraccion f) {
42         setNum(f.num);
43         setDen(f.den);
44     }
45
46     public String toString() {
47         if (getNum() == 0)
48             return "0";
49         if (getDen() == 1)
50             return "" + getNum();
51         else
52             return getNum() + "/" + getDen();
53     }
54
55     public Fraccion mas(Fraccion f) {
56         try {
57             return new Fraccion(getNum() * f.getDen() + f.getNum() * getDen(),
58                     getDen() * f.getDen());
59         } catch (CeroDenExc e) {
60             return new Fraccion(); // Nunca deberia pasar
61         }
62     }
63
64     public Fraccion menos(Fraccion f) {
65         try {
66             return new Fraccion(getNum() * f.getDen() - f.getNum() * getDen(),
67                     getDen() * f.getDen());
68         } catch (CeroDenExc e) {
69             return new Fraccion(); // Nunca deberia pasar
70         }
71     }
72
73     public int compareTo(Fraccion f) {
74         if (getNum() * f.getDen() > getDen() * f.getNum())
75             return 1;
76         if (getNum() * f.getDen() < getDen() * f.getNum())
77             return -1;
78         return 0;
79     }
80
81     private static int mcd(int num, int den) {
82         int max = Math.abs(Math.max(num, den));
83         int min = Math.abs(Math.min(num, den));
84         if (max % min == 0)
85             return min;
86         else
87             return mcd(min, max % min);
88     }
89
90     private void normalizar() {
91         int d = mcd(getNum(), getDen());
92         setNum(getNum() / d);
93         setDen(getDen() / d);
94                                 setChanged ();
95                                 notifyObservers ();
96     }
97
98 }
99
100 // vim: set et sw=4 sts=4 :