Итак, я новичок в программировании, и у меня возникли проблемы с этим заданием для моего класса программирования. Назначение - создать программу Java, используя два класса, которые могут выполнять арифметику c для дробей. Я думаю, что моя главная проблема связана с объектно-ориентированными концепциями, которые мне нужно использовать для этого проекта, такими как классы и объекты. Я до сих пор не совсем понимаю, как работают конструкторы, методы доступа, мутаторы и др. c.
Первый класс, Fraction. java, содержит определения методов для всех операций арифметики c, а также методы, чтобы найти наибольший общий знаменатель, сократить дроби и распечатать результаты. Я создал методы printFraction, reduceFraction, gcd и addFraction, но мне еще предстоит попробовать вычитать, умножать или делить.
Второй класс, TestFraction. java, предназначен для реализации класса Fraction. и проверить его возможности. Я написал некоторый код в этом классе для тестирования класса Fraction, пока я все еще работаю, и методы, которые у меня есть (print, reduce и gcd), похоже, работают помимо addFraction. Похоже, он печатает адрес памяти или что-то вместо искомой дроби. У меня есть идея, почему, но я не уверен, как это исправить.
Вот мой код до сих пор. Как я уже сказал, я новичок, и я уверен, что это не очень хорошо, но я в основном беспокоюсь о том, чтобы закончить и заставить программу работать. Если у вас есть какие-либо советы, пожалуйста, постарайтесь, чтобы мне было легче их понять. Вот пример выходных данных: пример выходных данных
Дробь. 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 (очень неполный, состоит только из базовых c тесты сейчас):
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));
}
}