分数添加java程序无法正常工作

时间:2015-05-06 00:40:17

标签: java fractions

我的Java类的最终程序出现问题。我们必须只使用到目前为止学到的概念,所以我不能使用其他类。基本上只是循环和数组和方法。

因此,对于这个程序,我们必须添加任意五组分数,并以最低形式给出GCD和结果。我必须在第一个表中显示所有数据,然后在第二个表中显示原始数据和GCD,结果以最低形式显示。它必须使用这些数据进行测试:

1/4 + 1/2
2/3 + 1/3
7/8 + 1/8
2/9 + 4/27
7/25 + 2/5

这是我到目前为止的代码。 (要温柔,我还是新手)

import java.util.Scanner;
public class HelloWorld{
    public static void main(String[] args) throws Exception{
        int[] num1Array = new int[5];
        int[] num2Array = new int[5];
        int[] deno1Array = new int[5];
        int[] deno2Array = new int[5];
        Scanner input = new Scanner(System.in);
        for(int x=0;x<5;x++) {                                    //Get all data from user
            System.out.println("Enter data for problem " + (x+1));
            System.out.println("Enter numberator for fraction 1");
            num1Array[x] = input.nextInt();
            System.out.println("Enter denominator for fraction 1");
            deno1Array[x] = input.nextInt();
            System.out.println("Enter numberator for fraction 2");
            num2Array[x] = input.nextInt();
            System.out.println("Enter denominator for fraction 2");
            deno2Array[x] = input.nextInt();
            System.out.println("********************");
        }
        System.out.println("*****ORIGINIAL DATA ******");  //Output all entered data
        System.out.println("First Fraction \t Second Fraction");
        for(int y=0;y<5;y++) {
            System.out.printf("%1d/%1d   \t\t %1d/%1d\n", num1Array[y], deno1Array[y], num2Array[y], deno2Array[y]);
        }
        System.out.println("*******FRACTIONS SHOWING ADDED RESULTS*********"); //Display results
        System.out.println("First Fraction \t Second Fraction GCD     Results");
        for(int z=0;z<5;z++){

            int finalgcd = gcdfinal(num1Array[z], num2Array[z], deno1Array[z], deno2Array[z]);
            int addFrac = fracAdd(num1Array[z], num2Array[z], deno1Array[z], deno2Array[z]);
            System.out.printf("%1d/%1d   \t\t %1d/%1d\t\t %1d \t %1d", num1Array[z], deno1Array[z], num2Array[z], deno2Array[z], finalgcd, addFrac);
            System.out.println();
        }
    }


    public static int fracAdd(int num1, int num2, int deno1, int deno2)
    {
        int e = lcm(deno1, deno2); //denominator
        int f1 = e / deno1;
        int f2 = e / deno2;
        int g1 = num1 * f1;
        int g2 = num2 * f2;
        int adding = g1 + g2;
        int k = gcd(adding, e);
        int final_num = adding / k;
        int final_deno = e / k;
        if(final_num == final_deno){
            return 1;
        }
        else {
            return (final_num, final_deno);
        }
    }

    public static int gcd(int a, int b) //Calculate GCD
    {
        while (b > 0)
        {
            int temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }

    public static int gcdfinal(int num1, int num2, int deno1, int deno2)
    {
        int e = lcm(deno1, deno2); //Calculate the GCD for display
        int f1 = e / deno1;
        int f2 = e / deno2;
        int g1 = num1 * f1;
        int g2 = num2 * f2;
        int end = g1 + g2;
        int k = gcd(end, e);
        return k;
    }
    public static int lcm(int a, int b) //Calculate LCM
    {
        return a * (b / gcd(a, b));
    }
}

我该如何做到这一点?我是在正确的轨道上吗?

1 个答案:

答案 0 :(得分:1)

试试这个,希望它可以帮到你。 :)

import java.util.Scanner;

public class AddingFraction {

public static void main(String[] args) {
// TODO Auto-generated method stub
    Scanner sc = new Scanner(System.in);
    System.out.println("please enter a fraction number in a/b format: ");
    String fraction1 = sc.nextLine();
    System.out.println("please enter another fraction number in a/b format: ");
    String fraction2 = sc.nextLine();
    addFractions(fraction1, fraction2);

}

public static void addFractions(String fractionNum1, String fractionNum2) {
    int numResult = 0;
    String resultFraction;
    String[] frcNum1 = fractionNum1.split("/");
    int numerator1 = Integer.parseInt(frcNum1[0]);
    int Denomenator1 = Integer.parseInt(frcNum1[1]);
    String[] frcNum2 = fractionNum2.split("/");
    int numerator2 = Integer.parseInt(frcNum2[0]);
    int Denomenator2 = Integer.parseInt(frcNum2[1]);
    if (Denomenator1 == Denomenator2) {
        numResult = numerator1 + numerator2;
        resultFraction = numResult + "/" + Denomenator1;
        System.out.println("Resultant Fraction is : "+resultFraction);
    } else {
        int denLcm = Denomenator1 * (Denomenator2 / gcd(Denomenator1, Denomenator2));;
        numResult = numerator1 * (denLcm / Denomenator1) + numerator2
                * (denLcm / Denomenator2);
        resultFraction = numResult + "/" + denLcm;
        System.out.println("Resultant Fraction is : "+resultFraction);
    }
}

private static int gcd(int a, int b) {
    while (b > 0) {
        int temp = b;
        b = a % b; // % is remainder
        a = temp;
    }
    return a;
}

}