比较经典的JAVA面向对象题目和我的解法

比较经典的JAVA面向对象题目和我的解法

设计一个表示分数的类XXX。这个类用两个int类型的变量分别表示分子和分母,构造一个a/b的分数
这个类要提供以下的功能:
double toDouble();
将分数转换为double
Fraction plus(Fraction r);
自己的分数和r的分数相加,产生一个新的对象。
Fraction multiply(Fraction r);
/将自己的分数和r的分数相乘,产生一个新的对象。
void print();
将自己以“分子/分母”的形式输出到标准输出,并带有回车换行。如果分数是1/1,应该输出1。当分子大于分母时,不需要提出整数部分,即31/30是一个正确的输出。
将自己的分数和r的分数相加,产生一个新对象。
将自己的分数和r的分数相乘,产生一个新对象。
将自己以“分子/分母”的形式输出到标准输出,并带有回车换行。如果分数是1/1,应该输出1。当分子大于分母时,不需要提出整数部分,即31/30是一个正确的输出。
注意,在创建和做完运算后应该化简分数为最简形式。如2/4应该被化简为1/2。
分享一下我的解法,可能不好…凑合着写

//类
public class Finction {

private  int  a ;  // 分子
private  int  b;  // 分母
    // 转化为Double
    public double todouble(){
        int a = this.a;
        int b = this.b;
        double c = a / b ;
        return c;
    }
public double print(){
    if (a % b == 0){
        int i = a / b;
        double i1 = i;
        System.out.println(i1);
        return  i1;
    }
    else {
        // 取公约数
        ArrayList<Integer> list = new ArrayList<>();
        ArrayList<Integer> list1 = new ArrayList<>();
        ArrayList<Integer> list2 = new ArrayList<>();
        for (int i = 2; i < a; i++) {
            if (a % i == 0){
            // 把所有可以整除的放进来
                   list.add(i);
            }
        }
        for (int i = 2; i < b; i++) {
            if (b % i == 0){
                // 把所有可以整除的放进来
                list1.add(i);
            }
        }
        for (int i = 0; i < list.size(); i++) {
            for (int i1 = 0; i1 < list1.size(); i1++) {
                if (list.get(i) == list1.get(i1)){
                    list2.add(list1.get(i1));
                }
            }
        }
        // 如果有公约数则除
        if (list2.size() != 0){
            for (int i = 0; i < list2.size(); i++) {
                 a = a /  list2.get(i);
                 b = b / list2.get(i);
            }
        }
        System.out.println(a + "/" + b);
        return 0;
    }
}
// 相加
public Finction plus(Finction i){
    Finction f = new Finction();
    int b = i.getB();
    int b1 = this.b;
    int b2 = b * b1;
    int a = i.getA();
    int a1 = this.a;
    int i1 = a1 * b;
    int i2 = a * b1;
    int i3 = i1 + i2;
    f.setA(i3);
    f.setB(b2);
return f;
}
// 相乘
public Finction multiply(Finction finction){
    Finction f = new Finction();
    int b = finction.getB();
    int bi = this.b;
    // 分母
    int b1 = b * bi;
    //分子
    int a = finction.getA();
    int a1 = this.a;
    int a2 = a * a1;
    f.setA(a2);
    f.setB(b1);
    return f;
}
    public Finction() {
    }

    public Finction(int a, int b) {
        this.a = a;
        this.b = b;
    }

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }
}


// 主方法
` public class DoMain {
    public static void main(String[] args) {
        Finction finction = new Finction(3,2);
        Finction multiply = finction.multiply(new Finction(6, 5));
        multiply.print();
        System.out.println("======================");
        Finction plus = finction.plus(new Finction(3, 2));
        plus.print();
        System.out.println("=========================");
        Finction plus1 = finction.plus(new Finction(6, 2));
        plus1.print();
    }

}
`
                              
本人才疏学浅,如有错误,请指正.
如有不足,请多包涵,谢谢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值