栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

JAVA面向对象程序设计翁恺 第一周作业——类与对象

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA面向对象程序设计翁恺 第一周作业——类与对象

题目链接:面向对象程序设计——Java语言_中国大学MOOC(慕课) (icourse163.org)

题目内容:设计一个表示分数的类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
{
    //类中的成员变量最好都设置为private
    private int mol;//分子
    private  int den;//分母
    private double dou;//浮点数类型值
    public Fraction(int mol, int den)//构造函数
    {
        this.mol = mol;
        this.den = den;
    }
    public double toDouble()//将分数转换为double类型值
    {
        dou = mol/(double)den;
        return dou;
    }
    public int theDivisor(int a, int b)//返回a,b两个数的最大公约数
    {
        int num = 1;
        for(int i=2; i<=a && i<=b; i++)
        {
            if(a%i==0 && b%i==0)
                num = i;
        }
        return num;
    }
    public Fraction plus(Fraction r)//将自己的分数和r的分数相加,产生一个新的Fraction的对象
    {
        int mol_1 = this.mol;//为了不改变对象原始值,采用新增的变量来计算并返回值
        int den_1 = this.den;
        int mol_2 = r.mol;
        int den_2 = r.den;
        int ride_den, mol_result;//分别为两个分数相加之后分母、分子的最终值
        if(den_1 == den_2)
        {
            mol_result = mol_1 + mol_2;
            ride_den = den_1;
        }
        else if(den_2%den_1==0)
        {
            ride_den = den_2;
            mol_1 *= (den_2/den_1);
            mol_result = mol_1 + mol_2;
        }
        else if(den_1%den_2==0)
        {
            ride_den = den_1;
            mol_2 *= (den_1/den_2);
            mol_result = mol_1 + mol_2;
        }
        else
        {
            ride_den = den_1 * den_2;
            mol_1 *= den_2;
            mol_2 *= den_1;
            mol_result = mol_1 + mol_2;
        }
        return new Fraction(mol_result, ride_den);
    }
    public Fraction multiply(Fraction r)//将自己的分数和r的分数相乘
    {
        int mol_1 = this.mol;
        int den_1 = this.den;
        int mol_2 = r.mol;
        int den_2 = r.den;
        int mol_result = mol_1*mol_2;
        int den_result = den_1*den_2;
        //产生一个新的Fraction的对象
        return new Fraction(mol_result, den_result);//这样不会改变a对象中变量的值
    }
    public void print()//将自己以“分子/分母”的形式输出到标准输出
    {
        if(this.mol == this.den)//分子分母相等
            System.out.println(1);
        else if(theDivisor(mol,den) == 1)//没有最大公约数
            System.out.println(mol+"/"+den);
        else//有最大公约数进行约分
        {
            int divisor = theDivisor(mol,den);
            int mol_1 = mol, den_1 = den;
            mol_1 /= divisor;
            den_1 /= divisor;
            System.out.println(mol_1+"/"+den_1);
        }
    }
    public void printDouble()//打印变为double的值,本次作业没有用到
    {
        double toDouble = toDouble();
        System.out.println("double is: "+toDouble);
    }
}

运行结果:

 

如有感到疑惑的地方欢迎在评论区提出或私信作者噢

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026137.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号