需要帮助将一些整数与一个分数分开

时间:2015-10-28 05:28:00

标签: java

我正在试用一个小数计算器项目。我已经弄清楚如何在操作方面做所有事情,但我仍在努力减少我的代码给我的分数答案。我对欧几里得算法需要做的事情有所了解,但我需要有两个整数。我知道整数是什么,但是我不能将它们隔离成插入一个2整数的方法,然后将它们作为一个分数打印出来。

我的主要课程:

    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;
    }

}

这是我的Fraction类,我打算主持Euclidian算法。

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;
} 
}

1 个答案:

答案 0 :(得分:0)

首先,您显然需要计算分子和分母之间的最大公分母(GCD)。您可以按如下方式实现此目的,其中p是分子,q是分母。

public static int getGCD(int p, int q) {
    while (q != 0) {
        int temp = q;
        q = p % q;
        p = temp;
    }
    return p;
}

现在你计算了GCD,你需要做的就是将这个数字除以分子和分母,从而为你提供最简化的分数形式。

更新: 您的produceAnswer功能可能是您的错误的来源。尝试创建一个以字符串作为输入的函数,并通过检查字符串中的每个字符来创建一个分数对象,直到找到“/”。此时,您可以隔离分子和分母,并将它们分配给您将返回的此分数对象。

完成此操作后,您只需更改produceAnswer功能即可获取分数对象,并轻松访问所需的数据。