public class Murtoluku3 { private int osoittaja; private int nimittaja; private int kerroOsoittaja; private int kerroNimittaja; public Murtoluku3(int os, int nim) { if (nim == 0) nim = 1; if (nim * os < 0) { // Mahdollinen etumerkki tulee aina osoittajaan this.osoittaja = -Math.abs(os); this.nimittaja = Math.abs(nim); } else { this.osoittaja = Math.abs(os); this.nimittaja = Math.abs(nim); } } public int kerroOsoittaja() { return this.osoittaja; } public int kerroNimittaja() { return this.nimittaja; } public Murtoluku3 summa(Murtoluku3 toinenLuku) { Murtoluku3 uusiLuku; int osoittaja1, osoittaja2, nimittaja1, nimittaja2; osoittaja1 = this.osoittaja; osoittaja2 = toinenLuku.kerroOsoittaja(); nimittaja1 = this.nimittaja; nimittaja2 = toinenLuku.kerroNimittaja(); /* Lavennetaan luvut samannimisiksi */ osoittaja1 *= nimittaja2; osoittaja2 *= nimittaja1; nimittaja1 *= nimittaja2; /* Luodaan uusi murtoluku, johon summa tulee */ uusiLuku = new Murtoluku3(osoittaja1 + osoittaja2, nimittaja1); return uusiLuku; } public Murtoluku3 tulo(Murtoluku3 toinenLuku) { Murtoluku3 uusiLuku; uusiLuku = new Murtoluku3(this.osoittaja * toinenLuku.kerroOsoittaja(), this.nimittaja * toinenLuku.kerroNimittaja()); return uusiLuku; } public boolean onkoSama(Murtoluku3 toinenLuku) { return (this.osoittaja == toinenLuku.kerroOsoittaja() && this.nimittaja == toinenLuku.kerroNimittaja()); } public boolean onkoYhtasuuri(Murtoluku3 toinenLuku) { int luku1, luku2, luku3, luku4, syt = 0; luku1 = Math.abs(this.osoittaja); luku2 = Math.abs(this.nimittaja); if (luku1 != 0) { while (luku1 != luku2) if (luku1 > luku2) luku1 = luku1 - luku2; else luku2 = luku2 - luku1; syt = luku1; /* sievennet��n */ this.osoittaja /= syt; this.nimittaja /= syt; } luku3 = Math.abs(toinenLuku.kerroOsoittaja()); luku4 = Math.abs(toinenLuku.kerroNimittaja()); if (luku3 != 0) { while (luku3 != luku4) if (luku3 > luku4) luku3 = luku3 - luku4; else luku4 = luku4 - luku3; syt = luku3; /* sievennet��n */ toinenLuku.kerroOsoittaja /= syt; toinenLuku.kerroNimittaja /= syt; } return ((this.osoittaja /= syt) == (toinenLuku.kerroOsoittaja /= syt) && (this.nimittaja /= syt) == (toinenLuku.kerroNimittaja /= syt)); } public void sievenna() { int luku1, luku2, syt; /* lasketaan osoittajan ja nimitt�j�n suurin yhteinen tekij� */ luku1 = Math.abs(this.osoittaja); luku2 = Math.abs(this.nimittaja); if (luku1 != 0) { while (luku1 != luku2) if (luku1 > luku2) luku1 = luku1 - luku2; else luku2 = luku2 - luku1; syt = luku1; /* sievennet��n */ this.osoittaja /= syt; this.nimittaja /= syt; } } public String toString() { return this.osoittaja + "/" + this.nimittaja; } }