2015-01-11 8 views
0

분수로 곱셈과 나눗셈을하는 학교용 프로그램을 작성하고 있습니다. 현재 코드를 실행할 때 분수 2/4와 4/6을 곱하면 0/1이됩니다. 필자가 2/4 및 4/6 분수에 대해 분모/분모에 대한 구성 요소를 개별적으로 테스트했을 때, 그것은 0 1 0 1을 나에게 돌려주었습니다. 다음은 코드와 함께 출력과 코드입니다. fraction1의분수 프로그램이 작동하지 않습니다.

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
분모 4
Fractioni이다
= 2/4 = 3/6 Fractioni
Fractioni = 0/1
이것이 환원 된 분획이다
분수 = 0/0
분수 = 0/1
분수 = 0/1,210 Fractioni = 0/1
Fractioni = 0/0
Fractioni = 0/0
Fractioni = 당신의 클래스를 만들었 기 때문에 0/0

+1

디버거를 사용해 보셨습니까? 진지하게, 당신은 프로그램하는 법을 배우고 있으며, 당신이 배워야 할 기술 중 하나는 당신 자신의 코드를 디버깅하는 방법입니다. 당신이 그것을하려고하지 않으면, 당신은 배우지 않을 것입니다. –

답변

0

어쩌면, 그것은 2/4 3를 나눕니다 것을이다/6. 나는 프로그래밍이 문자 그대로 2/4와 같은 숫자를 사용한다고 생각하며, 1과 0과 같은 숫자 만 따로 따로 사용하지는 않는다고 생각한다.

관련 문제