使用两个类对分数进行算术的Java程序

问题描述 投票:0回答:1

所以我是编程的初学者,我在编程课上的这项作业遇到了麻烦。任务是使用两个可以对分数进行算术运算的类来创建Java程序。我认为我的主要问题是我需要在该项目中使用的面向对象的概念,例如类和对象。我对构造函数,访问器,修改器等的工作方式仍然感到困惑。

第一类Fraction.java包含所有算术运算的方法定义,以及找到最大公分母,减少分数和打印结果的方法。我已经创建了printFraction,reduceFraction,gcd和addFraction方法,但是我还没有尝试过减法,乘法或除法。

第二个类TestFraction.java旨在实现Fraction类并测试其功能。我在此类中编写了一些代码来测试Fraction类,而我仍在工作,并且除了addFraction之外,我拥有的方法(打印,缩小和gcd)似乎也可以工作。看起来它打印的是内存地址或其他内容,而不是我要查找的部分。我知道为什么,但是我不确定如何解决。

到目前为止是我的代码。就像我说的,我是一个初学者,我确定它不是很好,但是我主要担心完成和使该程序正常工作。如果您有任何建议,请尝试使我更容易理解。这是一个示例输出:sample output

Fraction.java:

public class Fraction {
    private int numerator;
    private int denominator;

    //no-arg constructor
    Fraction() {
        numerator = 0;
        denominator = 1;
    }

    //constructor
    Fraction(int numerator, int denominator) {
        this.numerator = numerator;
        this.denominator = denominator;
    }

    //accessor for numerator
    int getNumerator() {
        return numerator;
    }

    //mutator for numerator
    void setNumerator(int num) {
        numerator = num;
    }

    //accessor for denominator
    int getDenominator() {
        return denominator;
    }

    //mutator for denominator
    void setDenominator(int denom) {
        denominator = denom;
    }

    //printFraction method concatenates the numerator and denominator with a "/" string between them
    static void printFraction(int numerator, int denominator) {
        System.out.print(numerator + "/" + denominator);
    }

    //reduceFraction method uses the gcd method to print a reduced version of the fraction given
    public static void reduceFraction(int numerator, int denominator) {
        int smaller;
        if (numerator < denominator) {
            smaller = numerator;
        }
        else {
            smaller = denominator;
        }
        for (int i = smaller; i > 0; --i) {
            if (numerator % i == 0 && denominator % i == 0) {
                System.out.print("Reduced form: " + (numerator/gcd(numerator, denominator)) + "/" + (denominator/gcd(numerator, denominator)));
                break;
            }
        }
    }

    //recursive method that calls itself until it reduces completely to the gcd
    public static int gcd(int numerator, int denominator) {
        if (numerator % denominator == 0) {
            return denominator;
        }
        return gcd(denominator, numerator % denominator);
    }

    public static Fraction addFraction(Fraction a, Fraction b) {
        return new Fraction((a.numerator * b.denominator + a.denominator * b.numerator), (a.denominator * b.denominator));
    }

TestFraction.java(非常不完整,目前仅由基本测试组成:):

import java.util.Scanner;
public class TestFraction {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.print("Enter the first fraction's numerator and denominator separated by spaces: ");
        Fraction myFraction1 = new Fraction(input.nextInt(), input.nextInt());
        System.out.print("Enter the second fraction's numerator and denominator separated by spaces: ");
        Fraction myFraction2 = new Fraction(input.nextInt(), input.nextInt());

        Fraction.printFraction(myFraction1.getNumerator(), myFraction1.getDenominator());
        System.out.println();
        Fraction.printFraction(myFraction2.getNumerator(), myFraction2.getDenominator());
        System.out.println();

        System.out.print(Fraction.gcd(myFraction1.getNumerator(), myFraction1.getDenominator()));
        System.out.println();
        System.out.print(Fraction.gcd(myFraction2.getNumerator(), myFraction2.getDenominator()));
        System.out.println();

        Fraction.reduceFraction(myFraction1.getNumerator(), myFraction1.getDenominator());

        System.out.println();
        System.out.println(Fraction.addFraction(myFraction1, myFraction2));
    }
}
java oop
1个回答
0
投票

您正在尝试System.out.print一个对象。要解决此问题,您可以在分数类中编写toString()函数like here

并像现在一样打印结果

public string toString(){
    return this.numerator+'/'+ this.denominator;

}
© www.soinside.com 2019 - 2024. All rights reserved.