2 class CeroDenExc extends Exception {
10 public void setNum(int n) {
14 public CeroDenExc(int num) {
18 public String toString() {
19 return "Division por 0 (numerador = " + getNum() + ")";
26 public Fraccion mas(Fraccion f);
28 public Fraccion menos(Fraccion f);
32 interface ComparaFrac {
34 public int compareTo(Fraccion f);
38 class Fraccion implements OperFrac, ComparaFrac {
51 public void setNum(int n) {
55 public void setDen(int d) {
64 public Fraccion(int num, int den) throws CeroDenExc {
66 throw new CeroDenExc(num);
72 public Fraccion(Fraccion f) {
77 public String toString() {
83 return getNum() + "/" + getDen();
86 public Fraccion mas(Fraccion f) {
88 return new Fraccion(getNum() * f.getDen() + f.getNum() * getDen(),
89 getDen() * f.getDen());
90 } catch (CeroDenExc e) {
91 return new Fraccion(); // Nunca deberia pasar
95 public Fraccion menos(Fraccion f) {
97 return new Fraccion(getNum() * f.getDen() - f.getNum() * getDen(),
98 getDen() * f.getDen());
99 } catch (CeroDenExc e) {
100 return new Fraccion(); // Nunca deberia pasar
104 public int compareTo(Fraccion f) {
105 if (getNum() * f.getDen() > getDen() * f.getNum())
107 if (getNum() * f.getDen() < getDen() * f.getNum())
112 private static int mcd(int num, int den) {
113 int max = Math.abs(Math.max(num, den));
114 int min = Math.abs(Math.min(num, den));
118 return mcd(min, max % min);
121 private void normalizar() {
122 int d = mcd(getNum(), getDen());
123 setNum(getNum() / d);
124 setDen(getDen() / d);
128 public static void main(String args[]) throws CeroDenExc {
130 Fraccion f = new Fraccion(10, 0);
131 } catch (CeroDenExc e) {
132 System.out.println("Ahhh! Esta rota la fraccion!"
133 + " tiene numerador " + e.getNum() + " y divisor 0");
135 Fraccion f1 = new Fraccion(2, 10);
136 System.out.println("f1 = " + f1);
137 System.out.println("f1 + f1 = " + f1.mas(f1));
138 Fraccion f3 = f1.menos(new Fraccion(100, 4));
139 System.out.println("f3 = " + f3);
140 System.out.println("f3 comparado a f1 = " + f3.compareTo(f1));
141 //System.out.println("Java esta roto en el manejo de excepciones!!!");
146 // vim: set et sw=4 sts=4 :