【问题标题】:Java Program to simplify fractions not working.用于简化分数的 Java 程序不起作用。
【发布时间】:2015-09-11 01:37:35
【问题描述】:

我正在尝试编写一个程序,该程序将从用户那里获取两个分数(以 a/b 的形式),然后对它们进行某些操作并简化结果。我已经能够正确计算数学,但我在简化部分没有运气。每当我运行程序时,我都会收到 ArithmeticExceptions。

谁能指出我正确的方向并对我的代码提供一些反馈?

欢迎和赞赏任何建议!

主类:

    import java.util.*;
    public class Fraction {

        /**
         * @param args
         */
        @SuppressWarnings("resource")
        public static void main(String[] args) {

            Scanner input = new Scanner(System.in);
            System.out.println("Please enter your first fraction:");
            String frac = input.nextLine();
            Driver f1 = new Driver(frac);

            System.out.println("Please enter your second fraction:");
            String frac2 = input.nextLine();
            Driver f2 = new Driver(frac2);

            Driver multiFrac = f1.multiply(f1, f2);
            System.out.println("Multiplication: " +multiFrac.getNum()+ "/" + multiFrac.getDenom());

            Driver divFrac = f1.divide(f1, f2); 
            System.out.println("Division: " + divFrac.getNum()+ "/" + divFrac.getDenom());

            Driver addFrac = f1.add(f1, f2);
            System.out.println("Addition: " + addFrac.getNum()+ "/" + addFrac.getDenom());


            Driver subFrac = f1.sub(f1, f2);
            System.out.println("Subtraction: " + subFrac.getNum()+ "/" + subFrac.getDenom());


        }


    }

构造函数类:

    public class Driver {

        public static int num0;
        public static int denom0;
        private int denom = 0;
        private int num = 0;

        public Driver (String frac){

    String s0[] = frac.split("/");

    int[] numbers0 = new int[s0.length];
    for(int i = 0;i < s0.length;i++){

        numbers0[i] = Integer.parseInt(s0[i]);
    }

    num = numbers0[0];
    denom = numbers0[1];
}

public Driver(int num0, int denom0) {
    num = num0;
    denom = denom0;
}

public int getNum(){
    int gcf= GCD(num0, denom0);
    return (num/gcf);
}

public int getDenom(){
    int gcf = GCD(num0, denom0);
    return (denom/gcf);
}


public Driver add(Driver firstFrac, Driver secondFrac){
    int denom0 = firstFrac.getDenom() * secondFrac.getDenom();
    int num0 = firstFrac.getNum() * secondFrac.getDenom() + secondFrac.getNum() * firstFrac.getDenom();
    this.GCD(num0, denom0);
    return new Driver (num0 , denom0);
}

public Driver sub(Driver firstFrac, Driver secondFrac){
    int denom0 = firstFrac.getDenom() * secondFrac.getDenom();  
    int num0 = (firstFrac.getNum() * secondFrac.getDenom()) - (secondFrac.getNum() * firstFrac.getDenom());
    return new Driver (num0 , denom0);
}

public Driver multiply(Driver firstFrac, Driver secondFrac){
    int num0 = firstFrac.getNum() * secondFrac.getNum();
    int denom0 = firstFrac.getDenom() * secondFrac.getDenom();
    return new Driver (num0, denom0);
}

public Driver divide(Driver firstFrac, Driver secondFrac){
    int num0 = firstFrac.getNum() * secondFrac.getDenom();
    int denom0 = firstFrac.getDenom() * secondFrac.getNum();
    this.GCD(num0, denom0);
    return new Driver (num0, denom0);
}

public int GCD(int a, int b){
       if (b==0) return a;
       return GCD(b,a%b);
 }
}

【问题讨论】:

    标签: java fractions simplify greatest-common-divisor


    【解决方案1】:

    这是一个提示,使用 BigDecimal

    String str[] = frac.split("/");
    
    BigDecimal top = new BigDecimal (str[0]);
    BigDecimal bottom= new BigDecimal (str[1]);
    
    BigDeimal result = top.divide (bottom);
    

    http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#divide(java.math.BigDecimal)

    【讨论】:

    • BigDecimal 对分数没有太大帮助。 new BigDecimal(1).divide(new BigDecimal(3)); 抛出异常。
    • 是的,阅读 javadocs,并考虑使用舍入模式。我将尝试向 OP 说明,要求标准 java 类并不是一个好主意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 2013-03-03
    • 1970-01-01
    相关资源
    最近更新 更多