2015-01-11 3 views
0

Я пишу программу для школы, которая делает умножение и деление на фракции. Когда я запускаю текущий код, умножая фракции 2/4 и 4/6, дайте мне 0/1. Когда я индивидуально тестировал компоненты для числителя/знаменателя для фракций 2/4 и 4/6, он вернул мне 0 1 0 1. Вот вывод и код с первым кодом.Программа не работает

import java.util.*; 
import java.util.Scanner.*; 

class Fraction 
{ 
    protected static int numerator, denominator; 

    public static void main(String args[]) 
    { 
     System.out.println("Chp. 25 LAB 1"); 
     System.out.println(); 


// main commands for testing first class Fraction 

     Fraction f1 = new Fraction(2,4); 
     System.out.println("numerator of fraction1 is " + f1.getNum()); 
     System.out.println("denominator of fraction1 is " + f1.getDen()); 
     f1.displayFraction(); 
     f1.alterFraction(3,6); 
     f1.displayFraction(); 


// main commands for testing second class FractionArithmetic 

     f1 = new Fraction(2,4); 
     Fraction f2 = new Fraction(4,6); 

     FractionArithmetic f3 = new FractionArithmetic(); 
     f3.multFracts(f1, f2); 
     f3.display(); 

     f3 = new FractionArithmetic(); 
     f3.divFracts(f1, f2); 
     f3. display(); 


// main commands for testing second class FractionOperations 

     f1 = new Fraction(2,4); 
     f2 = new Fraction(4,6); 

     FractionOperations fract = new FractionOperations(); 
     fract.multFracts(f1, f2); 
     fract.display(); 
     fract.reduce(); 
     fract.getFraction().displayFraction(); 

     fract = new FractionOperations(); 
     fract.divFracts(f1, f2); 
     fract.display(); 
     fract.reduce(); 
     fract.getFraction().displayFraction(); 
    } 

    Fraction(int n, int d) 
    { 
     numerator = n; 
     denominator = d; 
    } 
    public int getNum() 
    { 
     return numerator; 
    } 
    public int getDen() 
    { 
     return denominator; 
    } 
    public void alterFraction(int n, int d) 
    { 
     numerator = n; 
     denominator = d; 
    } 
    public void displayFraction() 
    { 
     System.out.println("Fractioni = " + numerator + "/" + denominator); 
    } 
} 

class FractionArithmetic 
{ 
    protected Fraction fraction; 

    FractionArithmetic() 
    { 
     fraction = new Fraction(0, 1); 
    } 
    FractionArithmetic(int n, int d) 
    { 
     fraction = new Fraction(n, d); 
    } 
    public void multFracts(Fraction a, Fraction b) 
    { 
//  System.out.println(a.getNum() + " " + a.getDen() + " " + b.getNum() + " " + b.getDen()); 
     fraction.alterFraction(a.getNum() * b.getNum(), a.getDen() * b.getDen()); 
    } 

    public void divFracts(Fraction a, Fraction b) 
    { 
     fraction.alterFraction(a.getNum() * b.getDen(), a.getDen() * b.getNum()); 
    } 
    public void display() 
    { 
     System.out.println("This is an unreduced fraction"); 
     fraction.displayFraction(); 
    } 
    public Fraction getFraction() 
    { 
     return fraction; 
    } 
} 

class FractionOperations extends FractionArithmetic 
{ 
    Fraction reducedFraction; 

    FractionOperations() 
    { 
     reducedFraction = new Fraction(0, 1); 
    } 
    FractionOperations(int n, int d) 
    { 
     super(n, d); 
     reducedFraction = new Fraction(n, d); 
    } 
    public void reduce() 
    { 
     int gcf = getGCF(reducedFraction.numerator, reducedFraction.denominator); 
     fraction.alterFraction(reducedFraction.numerator/gcf, reducedFraction.denominator/gcf); 
    } 
    private static int getGCF(int a, int b) 
    { 
     int gcf = 1; 
     a = Math.abs(a); 
     b = Math.abs(b); 
     if(a > b) 
     { 
      int dummy = b; 
      b = a; 
      a = dummy; 
     } 
     for(int i = 1; i <= b; i++) 
     { 
      if(b % i == 0 && a % i == 0) 
       gcf = i; 
     } 
     return gcf; 
    } 
    public void display() 
    { 
     reducedFraction.displayFraction(); 
     fraction.displayFraction(); 
    } 
    public Fraction getFraction() 
    { 
     return reducedFraction; 
    } 

} 

числитель fraction1 2
знаменатель fraction1 составляет 4
Fractioni = 2/4
Fractioni = 3/6
Fractioni = 0/1
Это нерастворимая фракция
Fractioni = 0/0
Fractioni = 0/1
Fractioni = 0/1
Fractioni = 0/1
Fractioni = 0/0
Fractioni = 0/0
Fractioni = 0/0

+1

Вы пробовали использовать отладчик? Серьезно, вы учитесь программировать, и одним из навыков, необходимых вам для изучения, является отладка вашего собственного кода. Если вы не попытаетесь это сделать, вы не узнаете. –

ответ

0

Может быть, это потому, что ваши классы сделали это, что она делит 2/4 на 3/6. Я думаю, что программирование использует цифры как 2/4 буквально, а не отдельно, в результате числа, такие как 1 и 0.

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