klasa ułamki - co mogę poprawić?

0

Witam. Otóż zabrałem sie za napisanie klasy ktora bedzie wykonywala podstawowe dzialania na ułamkach. Jako że jestem jeszcze początkującym zwracam sie z pytaniem co mozna poprawic/co zrobic lepiej?;)

 
package klasy;


public class Ulamek {
	
	private double licznik;
	private double mianownik;
	
	public Ulamek(double a, double b){
		this.licznik=a;
		this.mianownik=b;
	}
	
	public Ulamek(){}
	
	/**
	 *Wyswietla dany ulamek w konsoli
	 */
	public void pisz(){
		System.out.println(licznik+"/"+mianownik);
	}
	
	/**
	 *Pobiera wartosc mianownika
	 */
	public double getMianownik(){
		return this.mianownik;
	}
	
	/**
	 *Pobiera wartosc licznika
	 */
	public double getLicznik(){
		return this.licznik;
	}
	
	/**
	 *Ustawia mianownik
	 */
	public void setMianownik(double m){
		this.mianownik=m;
	}
	
	/**
	 *Ustawia licznik
	 */
	public void setLicznik(double l){
		this.licznik=l;
	}
}

 
package klasy;

public class Obliczenia {
	
	
	public int najmniejszyMianownik(double a,double b){
		for (int i = 2; i<1000000; i++) {
			if(i%a==0&&i%b==0){
				return i;
			}
		}
		return 0;
	}
	
	public int najmniejszyDzielnik(double a,double b){
		for (int i = 2; i<1000000; i++) {
			if(a%i==0&&b%i==0){
				return i;
			}
		}
		return 0;
	}

	public Ulamek skracanie(Ulamek a){
		Ulamek wynik = new Ulamek(a.getLicznik(),a.getMianownik());
		do {
			if (najmniejszyDzielnik(wynik.getLicznik(), wynik.getMianownik()) != 0) {
				int dzielnik=najmniejszyDzielnik(wynik.getLicznik(), wynik.getMianownik());
				wynik.setLicznik(wynik.getLicznik()/dzielnik);
				wynik.setMianownik(wynik.getMianownik()/dzielnik);
			}
		} while (najmniejszyDzielnik(wynik.getLicznik(), wynik.getMianownik()) != 0);
		return wynik;
	}
	
}

 
package klasy;

public class UlamkiObl {

	Obliczenia o = new Obliczenia();
	
	public Ulamek dodawanie(Ulamek a,Ulamek b){
		Ulamek wynik = new Ulamek();
		Ulamek jeden = new Ulamek(a.getLicznik(),a.getMianownik());
		Ulamek dwa = new Ulamek(b.getLicznik(),b.getMianownik());
		int mianownik = o.najmniejszyMianownik(a.getMianownik(), b.getMianownik());
		jeden.setLicznik(jeden.getLicznik()*(mianownik/jeden.getMianownik()));
		dwa.setLicznik(dwa.getLicznik()*(mianownik/dwa.getMianownik()));
		dwa.setMianownik(mianownik);
		jeden.setMianownik(mianownik);
		wynik.setLicznik(jeden.getLicznik()+dwa.getLicznik());
		wynik.setMianownik(mianownik);
		wynik=o.skracanie(wynik);
		return wynik;
	}

	/**
	 *Odejmowanie 2 ulamki
	 */
	public Ulamek odejmowanie(Ulamek a,Ulamek b){
		Ulamek wynik = new Ulamek();
		Ulamek jeden = new Ulamek(a.getLicznik(),a.getMianownik());
		Ulamek dwa = new Ulamek(b.getLicznik(),b.getMianownik());
		int mianownik = o.najmniejszyMianownik(a.getMianownik(), b.getMianownik());
		jeden.setLicznik(jeden.getLicznik()*(mianownik/jeden.getMianownik()));
		dwa.setLicznik(dwa.getLicznik()*(mianownik/dwa.getMianownik()));
		dwa.setMianownik(mianownik);
		jeden.setMianownik(mianownik);
		wynik.setLicznik(jeden.getLicznik()-dwa.getLicznik());
		wynik.setMianownik(mianownik);
		wynik=o.skracanie(wynik);
		return wynik;
	}
	
	/**
	 *Mnozy 2 ulamki
	 */
	public Ulamek mnozenie(Ulamek a,Ulamek b){
		Ulamek wynik= new Ulamek();
		wynik.setLicznik(a.getLicznik()*b.getLicznik());
		wynik.setMianownik(a.getMianownik()*b.getMianownik());
		wynik=o.skracanie(wynik);
		return wynik;
	}

	/**
	 *Dzieli 2 ulamki
	 */
	public Ulamek dzielenie(Ulamek a,Ulamek b){
		Ulamek wynik= new Ulamek();
		wynik.setLicznik(a.getLicznik()*b.getMianownik());
		wynik.setMianownik(a.getMianownik()*b.getLicznik());
		wynik=o.skracanie(wynik);
		return wynik;
	}
	
	/**
	 *Podnosi ulamek do wybranej potegi
	 */
	public Ulamek potega(Ulamek a,int b){
		Ulamek wynik= new Ulamek();
		wynik.setLicznik(Math.pow(a.getLicznik(),b));
		wynik.setMianownik(Math.pow(a.getMianownik(), b));
		return wynik;
	}
}

 

import klasy.*;

public class Konsolka {

	public static void main(String[] args) {
		Ulamek test = new Ulamek(375, 1000);
		Ulamek test2 = new Ulamek(35, 8);
		Ulamek test3 = new Ulamek();
		
		UlamkiObl u = new UlamkiObl();
		
		test3=u.dodawanie(test, test2);
		test3.pisz();
		
	}
}

Pozdrawiam k_k

0

Metody w Obliczenia i UlamkiObl powinny być statyczne, a wg mnie nawet te metody jako statyczne powinny być w klasie ułamki razem. Jak dla mnie nie ma sensu tak logiki rozrzucać w tym wypadku.

0
        
public int najmniejszyDzielnik(double a,double b){
                for (int i = 2; i<1000000; i++) {
                        if(a%i==0&&b%i==0){
                                return i;
                        }
                }
                return 0;
        } 

Tutaj powinieneś zmienić na warunek 'i<min(a,b)'. Niby tak i tak działa, ale dzielnik i tak nie może być większy niż licznik lub mianownik więc po co 1000000 iteracji jak masz do czynienia np. z ułamkiem 4/12 ;)

Mógłbyś też dodać metodę zwracającą liczbę całkowitą z ułamka i jego resztę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1