Mam zadanie:
Zdefiniuj klasę ułamek. Zaimplementuj metody dodawanie, odejmowania oraz skracania ułamka.
Niżej mój kod, czasem daje poprawne wyniki, czasem nie. Nie mogę znaleźć co jest źle, będę wdzięczny jak ktoś podpowie gdzie jest błąd.
import java.util.Scanner;
public class Ulamek{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("Podaj licznik i mianownik pierwszego ulamka: ");
Fraction ulamek1 = new Fraction(input.nextInt(), input.nextInt());
System.out.println("Podaj licznik i mianownik drugiego ulamka: ");
Fraction ulamek2 = new Fraction(input.nextInt(), input.nextInt());
System.out.println("Jaka operacje chcesz wykonac? ( +, -)");
char c = input.next().charAt(0);
System.out.print(ulamek1);
System.out.print(" " + c + " ");
System.out.println(ulamek2);
switch(c){
case '-':
System.out.println(ulamek1.sub(ulamek2));
break;
case '+':
System.out.println(ulamek1.sum(ulamek2));
break;
}
}
}
class Fraction{
private int numerator;
private int denominator;
public Fraction(int numerator, int denominator){
if(denominator < 0){
this.numerator = -numerator;
this.denominator = -denominator;
}else{
this.numerator = numerator;
this.denominator = denominator;
}
}
public Fraction sum(Fraction other){
int nww = nww(other.denominator, this.denominator);
int newNumerator = nww/this.denominator*this.numerator + nww/other.denominator*numerator;
return new Fraction(newNumerator, nww).reduce();
}
public Fraction sub(Fraction other){
int nww = nww(this.denominator, other.denominator);
int newNumerator = nww/this.denominator*this.numerator - nww/other.denominator*other.numerator;
return new Fraction(newNumerator, nww).reduce();
}
public Fraction reduce(){
int nwd = nwd(this.numerator, this.denominator);
return new Fraction(this.numerator/nwd, this.denominator/nwd);
}
private int nwd(int a, int b){
if(a < 0){
a = -a;
}
if(b < 0){
b = -b;
}
while(b != 0){
int temp = b;
b = a % b;
a = temp;
}
return a;
}
private int nww(int a, int b){
return a*b/nwd(a, b);
}
public String toString(){
return numerator + "/" + denominator;
}
}