У меня есть проект фракционного калькулятора, в котором я пытаюсь. Я выяснил, как делать все с точки зрения операций, но я все еще изо всех сил пытаюсь исправить ответы на фракции, которые мне дает мой код. Я имею представление о том, что мне нужно сделать с точки зрения евклидова алгоритма, но для этого мне нужно иметь два целых числа. Я знаю, что такое целые числа, но я не могу их изолировать, чтобы подключиться к методу с двумя целыми числами, а затем распечатать их как дробную.Нужна помощь, разделяющая отдельные целые числа с долей
Мой главный класс:
package fracCalc;
import java.util.Scanner;
// @KashyapGarimella
// Period 2
// CP 3
// FracCalc
public class FracCalc {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.println("Input an equation: ");
String input = console.nextLine();
while (!input.equals("quit")) {
System.out.println(produceAnswer(input));
System.out.println("Input another equation: ");
input = console.nextLine();
}
System.out.println("End.");
console.close();
}
public static String produceAnswer(String input) {
Scanner token = new Scanner(input);
String operator_1 = token.next();
String function = token.next();
String operator_2 = token.next();
token.close();
Fraction fraction_1 = Fraction.Improper (parse(operator_1));
Fraction fraction_2 = Fraction.Improper (parse(operator_2));
Fraction answer = solveEquation(fraction_1, function, fraction_2);
return (answ
er.Numerator + "/" + answer.Denominator);
}
public static Fraction parse(String input) {
Fraction fraction = new Fraction();
if(input.indexOf("_")> 0){
fraction.Integer = Integer.parseInt(input.substring(0, input.indexOf("_")));
fraction.Numerator = Integer.parseInt(input.substring(input.indexOf("_") + 1, input.indexOf("/")));
fraction.Denominator = Integer.parseInt(input.substring(input.indexOf("/") + 1));
}
else if (input.indexOf("/") > 0) {
fraction.Numerator = Integer.parseInt(input.substring(0, input.indexOf("/")));
fraction.Denominator = Integer.parseInt(input.substring(input.indexOf("/") + 1));
} else {
fraction.Integer = Integer.parseInt (input);
}
return fraction;
}
public static Fraction solveEquation (Fraction fraction_1, String function, Fraction fraction_2){
Fraction fraction = new Fraction();
if (function.equals("+")){
fraction.Numerator = fraction_1.Numerator * fraction_2.Denominator + fraction_1.Denominator * fraction_2.Numerator;
fraction.Denominator = fraction_1.Denominator * fraction_2.Denominator;
}
else if (function.equals("-")) {
fraction.Numerator = fraction_1.Numerator * fraction_2.Denominator - fraction_1.Denominator*fraction_2.Numerator;
fraction.Denominator = fraction_1.Denominator * fraction_2.Denominator;
}
else if (function.equals("*")) {
fraction.Numerator = fraction_1.Numerator * fraction_2.Numerator;
fraction.Denominator = fraction_1.Denominator * fraction_2.Denominator;
}
else if (function.equals("/")) {
fraction.Numerator = fraction_1.Numerator * fraction_2.Denominator;
fraction.Denominator = fraction_1.Denominator * fraction_2.Numerator;
}
return fraction;
}
}
Вот моя доля класса, где я намерен провести эвклидовский алгоритм.
package fracCalc;
public class Fraction {
int Numerator = 0;
int Denominator = 1;
int Integer = 0;
public static Fraction Improper(Fraction improper){
Fraction fraction = new Fraction();
fraction.Denominator = improper.Denominator;
if(improper.Integer < 0){
fraction.Numerator = improper.Integer * improper.Denominator + (-1) * improper.Numerator;
}
else {
fraction.Numerator = improper.Integer * improper.Denominator + improper.Numerator;
}
return fraction;
}
}
Вы спрашиваете, как применить алгоритм эвцидиан к уменьшению фракций? – Soana
Не совсем, я просто хотел выяснить, как отделить два целых числа, которые в настоящее время составляют мой дробный ответ, и подключить их к методу GCD, чтобы вернуть ответ типа фракции на мой метод productAnswer. –