2016-05-07 3 views
1

Я занимаюсь школьным проектом, в котором я добавляю 2 фракции и должен упростить ответ. До сих пор у меня есть хороший код, но есть несколько примеров, когда определенные фракции не упрощаются должным образом. Например, 1/4 + 1/6 1 дают 5/6 вместо 5/12. Можете ли вы проверить мой код на наличие возможных ошибок или указателей?Упрощение доли, Java

public int num1, num2, denom1, denom2, numSum, denomAns, denomSimp, gcd; 

public Fraction(int a1, int a2, int a3, int a4, int a5, int a6) { 
    this.num1 = a1; 
    this.num2 = a2; 
    this.denom1 = a3; 
    this.denom2 = a4; 
    this.numSum = a5; 
    this.denomAns = a6; 
} 

public void simplify() { 

    if (denom1 == denom2) { 
     denomAns = denom1; 
     numSum = num1 + num2; 
    } else { 
     denomAns = denom1 * denom2; 
     num1 = num1 * denom2; 
     num2 = num2 * denom1; 
     numSum = num1 + num2; 
    } 
    int tempNum = numSum, tempDenom = denomAns; 
    if (tempNum == 0) { 
     gcd = tempDenom; 
    } else { 
     while (tempDenom != 0) { 
      if (tempNum > tempDenom) { 
       tempNum = tempNum - tempDenom; 
      } else { 
       tempDenom = tempDenom - tempNum; 
      } 
     } 
     gcd = tempNum; 
    } 
    denomSimp = denomAns/gcd; 
    numSum = numSum/gcd; 
} 
+0

Что вы уже пробовали отладки кода? –

+0

Почему вы получаете 'denomAns',' denomSimp' и 'gcd' в конструкторе? Разве не вся идея вашей программы состоит в том, чтобы рассчитать последние три числа (некоторые как часть внутреннего «часового механизма»)? – MaxG

+0

Я протестировал код с 1/4 и 1/6 и дал мне 5/12, https://ideone.com/YR2SoF –

ответ

0
package test; 

public class Fraction { 

    private int num1; 
    private int num2; 
    private int denom1; 
    private int denom2; 

    private int num; 
    private int denom; 

    public Fraction(int num1, int num2, int denom1, int denom2) { 
     this.num1 = num1; 
     this.num2 = num2; 
     this.denom1 = denom1; 
     this.denom2 = denom2; 
    } 

    public void sum() { //sum the two fractions 
     num = (num1 * denom2) + (num2 * denom1); 
     denom = denom1 * denom2; 
    } 

    public void simplify() { 

     int gcd = gcd(num, denom); 

     num = num/gcd; 
     denom = denom/gcd; 
    } 

    public int gcd(int a, int b) { 
     return b == 0 ? a : gcd(b, a % b); 
    } 

    public static void main(String[] args) { 
     Fraction fraction = new Fraction(1,1,4,6); // 1/4 and 1/6 
     fraction.sum(); 
     fraction.simplify(); 
     System.out.println("Simplified : " + fraction.getNumSimp() + "/" + fraction.getDenomSimp()); 
    } 

    public int getNumSimp() { 
     return num; 
    } 

    public int getDenomSimp() { 
     return denom; 
    } 

} 
+0

Спасибо, очень полезно. – Gmancat

Смежные вопросы