从零开始的java生活(刷题篇4)

上机题

        1. 分数运算(加法和除法

【问题描述】

编写一个分数类Fraction。此类包含两个整数型属性:分子和分母。定义该类的构造方法及属性的get和set方法。定义该类的化简方法,如4/8化简为1/2。定义该类的toString方法,输出化简后的结果(如果是整数,只输出整数)。

编写两种,共4个方法分别完成Fraction的加法和除法运算:

第一种为实例方法,参数为一个Fraction对象,功能是当前对象和参数进行运算,加法方法可以按照下面来定义

public void add(Fraction a){

    //当前分数对象(即this)加上a,结果存储在this中

}

第二种为类方法,参数为两个Fraction对象,功能是对这两个Fraction对象进行运算,并返回运算结果,加法方法的定义如下

public static Fraction add(Fraction a,Fraction b){

    //返回a和b的相加的结果

}

编写测试类Test,测试并验证这四个方法的分数运算的正确性。要求输入两个分数的分母和分子,用这四个数字创建两个分数对象a和b,调用类方法做a和b的加法运算,得到分数对象c,将c作为结果输出,调用类方法做a和b的除法运算,得到分数对象d,将d作为结果输出,调用实例方法的做c和a的加法运算,结果存储在c中,将c作为结果输出,调用实例方法的做d和c的除法运算,结果存储在d中,将d作为结果输出。

【输入形式】a的分子和分母,b的分子和分母

【输出形式】

a+b的结果c

a/b的结果d

c+a的结果c

d/c的结果d

【样例输入】-2 3 3 5

【样例输出】

-1/15

-10/9

-11/15

50/33

【样例说明】
【评分标准】结果正确的满分

代码如下:

import java.util.Scanner;

public class Homework_1 {


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Fraction a = new Fraction();
        Fraction b = new Fraction();
        Fraction c = new Fraction();
        Fraction d = new Fraction();
        a.setNumerator(sc.nextInt());
        a.setDenominator(sc.nextInt());
        b.setNumerator(sc.nextInt());
        b.setDenominator(sc.nextInt());
        c.add(a);
        c.add(b);
        d.add(a);
        d.division(b);
        System.out.println(c.toString());
        System.out.println(d.toString());
        System.out.println( Fraction.add(c,a).toString());
        System.out.println( Fraction.division(d,c).toString());
    }
}

class Fraction{
    private int numerator = 0;
    private int denominator = 0;
    public int getDenominator() {
        return denominator;
    }
    public void setDenominator(int denominator) {
        this.denominator = denominator;
    }
    public int getNumerator() {
        return numerator;
    }
    public void setNumerator(int numerator) {
        this.numerator = numerator;
    }
    public void Simplify() {
        for(int i = Math.abs(this.numerator);i>=1;--i){
            if((this.numerator%i==0)&&(this.denominator%i==0)){
                this.numerator /=i;
                this.denominator /=i;
            }
        }
    }
    public String toString() {
        if(this.numerator%this.denominator==0){
            return String.valueOf(this.numerator/this.denominator);
        }
        this.Simplify();
        if(this.denominator<0){
            this.denominator = Math.abs(this.denominator);
            this.numerator = -this.numerator;
        }
        return String.valueOf(this.numerator)+"/"+String.valueOf(this.denominator) ;
    }

    public void add(Fraction a){
        if(this.numerator==0 && this.denominator == 0){
            this.numerator = a.numerator;
            this.denominator = a.denominator;
        }else {
            this.numerator = this.numerator * a.denominator + a.numerator * this.denominator;
            this.denominator = this.denominator * a.denominator;
            this.Simplify();
        }
    }
    public static Fraction add (Fraction a,Fraction b){
        if(a.numerator==0 && a.denominator == 0){
            a.numerator = b.numerator;
            a.denominator = b.denominator;
        }else {
            a.numerator = a.numerator * b.denominator + b.numerator * a.denominator;
            a.denominator = a.denominator * b.denominator;
            a.Simplify();
        }
        return a;
    }
    public void division(Fraction a){
        this.numerator *= a.denominator;
        this.denominator *= a.numerator;
        this.Simplify();
    }
    public static Fraction division (Fraction a,Fraction b){
        a.numerator*=b.denominator;
        a.denominator*=b.numerator;
        a.Simplify();
        return a;
    }

}

        2. 分数运算(减法和乘法

 【问题描述】

编写一个分数类Fraction。此类包含两个整数型属性:分子和分母。定义该类的构造方法及属性的get和set方法。定义该类的化简方法,如4/8化简为1/2。定义该类的toString方法,输出化简后的结果(如果是整数,只输出整数)。
编写两种,共4个方法分别完成Fraction的减法和乘法运算:
第一种为实例方法,参数为一个Fraction对象,功能是当前对象和参数进行运算,减法方法可以按照下面来定义
public void substract(Fraction a){
    //当前分数对象(即this)减去a,结果存储在this中
}
第二种为类方法,参数为两个Fraction对象,功能是对这两个Fraction对象进行运算,并返回运算结果,减法方法的定义如下
public static Fraction substract(Fraction a,Fraction b){
    //返回a和b的相减的结果
}
编写测试类Test,测试并验证这四个方法的分数运算的正确性。要求输入两个分数的分母和分子,用这四个数字创建两个分数对象a和b,调用类方法做a和b的减法运算,得到分数对象c,将c作为结果输出,调用类方法做a和b的乘法运算,得到分数对象d,将d作为结果输出,调用实例方法的做c和d的减法运算,结果存储在c中,将c作为结果输出,调用实例方法的做d和c的乘法运算,结果存储在d中,将d作为结果输出。
【输入形式】a的分子和分母,b的分子和分母
【输出形式】
a-b的结果c
a*b的结果d
c-d的结果c
d*c的结果d
【样例输入】1 2 2 3
【样例输出】
-1/6
1/3
-1/2
-1/6
【样例说明】
【评分标准】结果正确的满分

代码如下:

import java.util.Scanner;

public class Homework_2 {


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Fraction a = new Fraction();
        Fraction b = new Fraction();
        Fraction c = new Fraction();
        Fraction d = new Fraction();
        a.setNumerator(sc.nextInt());
        a.setDenominator(sc.nextInt());
        b.setNumerator(sc.nextInt());
        b.setDenominator(sc.nextInt());
        c.subtraction(a);
        c.subtraction(b);
        d.multiplication(a);
        d.multiplication(b);
        System.out.println(c.toString());
        System.out.println(d.toString());
        System.out.println( Fraction.subtraction(c,d).toString());
        System.out.println( Fraction.multiplication(d,c).toString());
        sc.close();
    }
}

class Fraction{
    private int numerator = 0;
    private int denominator = 0;
    public Fraction(){

    }
    public Fraction(int numerator,int denominator){
        this.numerator = numerator;
        this.denominator = denominator;



    }
    public int getDenominator() {
        return denominator;
    }
    public void setDenominator(int denominator) {
        this.denominator = denominator;
    }
    public int getNumerator() {
        return numerator;
    }
    public void setNumerator(int numerator) {
        this.numerator = numerator;
    }
    public void Simplify() {
        for(int i = Math.abs(this.numerator);i>=1;--i){
            if((this.numerator%i==0)&&(this.denominator%i==0)){
                this.numerator /=i;
                this.denominator /=i;
            }
        }
    }
    public String toString() {
        if(this.numerator%this.denominator==0){
            return String.valueOf(this.numerator/this.denominator);
        }
        this.Simplify();
        if(this.denominator<0){
            this.denominator = Math.abs(this.denominator);
            this.numerator = -this.numerator;
        }
        return String.valueOf(this.numerator)+"/"+String.valueOf(this.denominator) ;
    }

    public void subtraction(Fraction a){
        if(this.numerator==0 && this.denominator == 0){
            this.numerator = -a.numerator;
            this.denominator = -a.denominator;
        }else {
            this.numerator = this.numerator * a.denominator - a.numerator * this.denominator;
            this.denominator = this.denominator * a.denominator;
            //this.Simplify();
        }
    }
    public static Fraction subtraction (Fraction a,Fraction b){
        if(a.numerator==0 && a.denominator == 0){
            a.numerator = -b.numerator;
            a.denominator = -b.denominator;
        }else {
            a.numerator = a.numerator * b.denominator - b.numerator * a.denominator;
            a.denominator = a.denominator * b.denominator;
            //a.Simplify();
        }
        return a;



    }
    public void multiplication(Fraction a){
        if(this.numerator==0&&this.denominator==0) {
            this.numerator=a.numerator;
            this.denominator=a.denominator;
        }
        else{
            this.numerator *= a.numerator;
            this.denominator *= a.denominator;
            //this.Simplify();
        }
    }
    public static Fraction multiplication (Fraction a,Fraction b){
        int numerator = a.numerator*b.numerator;
        int denominator = a.denominator*b.denominator;
        //a.Simplify();
        return new Fraction(numerator,denominator);
    }

}

博主java萌新,有问题可评论区共同交流学习,欢迎大家交流awa

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值