분수로 곱셈과 나눗셈을하는 학교용 프로그램을 작성하고 있습니다. 현재 코드를 실행할 때 분수 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
디버거를 사용해 보셨습니까? 진지하게, 당신은 프로그램하는 법을 배우고 있으며, 당신이 배워야 할 기술 중 하나는 당신 자신의 코드를 디버깅하는 방법입니다. 당신이 그것을하려고하지 않으면, 당신은 배우지 않을 것입니다. –