所以我是编程的初学者,我在编程课上的这项作业遇到了麻烦。任务是使用两个可以对分数进行算术运算的类来创建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));
}
}
您正在尝试System.out.print一个对象。要解决此问题,您可以在分数类中编写toString()函数like here
并像现在一样打印结果
public string toString(){
return this.numerator+'/'+ this.denominator;
}