• 面向对象-Java MOOC翁恺老师第一次作业


    由于看这个慕课的时候已经结课了,没有办法提交查看代码是否正确。。。先保存一下,以后再提交改错

    欢迎批评指正!

    题目链接:https://www.icourse163.org/learn/ZJU-1001542001#/learn/ojhw?id=1004600071

    题目详情:

    题目内容:

    设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。

    这个类的构造函数是:

    Fraction(int a, int b)

        构造一个a/b的分数。

    这个类要提供以下的功能:

    double toDouble();

        将分数转换为double

    Fraction plus(Fraction r);

        将自己的分数和r的分数相加,产生一个新的Fraction的对象。注意小学四年级学过两个分数如何相加的哈。

    Fraction multiply(Fraction r);

        将自己的分数和r的分数相乘,产生一个新的Fraction的对象。

    void print();

        将自己以“分子/分母”的形式输出到标准输出,并带有回车换行。如果分数是1/1,应该输出1。当分子大于分母时,不需要提出整数部分,即31/30是一个正确的输出。

    注意,在创建和做完运算后应该化简分数为最简形式。如2/4应该被化简为1/2。

    你写的类要和以下的代码放在一起,并请勿修改这个代码:

    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            Fraction a = new Fraction(in.nextInt(), in.nextInt());
            Fraction b = new Fraction(in.nextInt(), in.nextInt());
            a.print();
            b.print();
            a.plus(b).print();
            a.multiply(b).plus(new Fraction(5,6)).print();
            a.print();
            b.print();
            in.close();
        }
    
    }

    注意,你的类的定义应该这样开始:

    class Fraction {

    也就是说,在你的类的class前面不要有public。

    输入格式:

    程序运行时会得到四个数字,分别构成两个分数,依次是分子和分母。

    输出格式:

    输出一些算式。这些输入和输出都是由Main类的代码完成的,你的代码不要做输入和输出。

    输入样例:

    2 4 1 3

    输出样例:

    1/2

    1/3

    5/6

    1

    1/2

    1/3

    我的代码:

    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            Fraction a = new Fraction(in.nextInt(), in.nextInt());
            Fraction b = new Fraction(in.nextInt(), in.nextInt());
            a.print();
            b.print();
            a.plus(b).print();
            a.multiply(b).plus(new Fraction(5,6)).print();
            a.print();
            b.print();
            in.close();
        }
    
    }
    
    class Fraction{
        int x, y;//x是分子,y是分母
        
        Fraction(int a, int b){
            this.x = a;
            this.y = b;
        }
        
        double toDouble(){
            return (double)x/y;
        }
        
        Fraction plus(Fraction r) {
            Fraction p = new Fraction(0, 1);
            p.x = x * r.y + y * r.x;
            p.y = y * r.y;
            return p;
        }
        
        Fraction multiply(Fraction r) {
            Fraction p = new Fraction(0, 1);
            p.x = x * r.x;
            p.y = y * r.y;
            return p;
        }
        void print() {
            int p = x, q = y, mod;
            if(p > q) {
                mod = p % q;
            }
            else {
                mod = q % p;
            }
            while(mod != 0) {
                if(p < q) {
                    q = mod;
                    mod = p % q;
                }
                else {
                    p = mod;
                    mod = q % p;
                }
            }
            
            if(p > q) {
                mod = q;
            }
            else {
                mod = p;
            }
            x /= mod;
            y /= mod;
            if(y == 1) {
                System.out.println(x);
            }
            else {
                System.out.println(x + "/" + y);
            }
        }
    }

    有任何问题请站内联系或邮箱zhuo2333@qq.com

  • 相关阅读:
    vue 环境的搭建及初始化项目
    vue axios 发送post请求,后端接收参数为null
    iOS-WKWebView的使用
    iOS开发GCD(3)-数据安全
    iOS开发-本地存储(偏好设置,Plist,归档)
    ios开发GCD(2)-dispatch_semaphore_t信号量计数器
    ios开发多线程之NSThread
    Runtime消息动态解析与转发流程
    iOS动画-从UIView到Core Animation
    贝塞尔曲线UIBezierPath简单使用
  • 原文地址:https://www.cnblogs.com/PineZhuo/p/10461492.html
Copyright © 2020-2023  润新知