鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 付大帅

设计一个表示分数的类Fraction

[复制链接]
 楼主| 发表于 2023-12-15 17:13:58 | 显示全部楼层
能否写成整体代码形式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-15 17:14:29 | 显示全部楼层
付大帅 发表于 2023-12-15 17:13
能否写成整体代码形式

当然可以,以下是整体代码形式的修复后的版本:
import java.util.Scanner;class Fraction {    private int numerator;  // 分子    private int denominator;  // 分母    // 构造方法    public Fraction(int a, int b) {        if (b == 0) {            System.out.println("错误,分母不能为0");            return;        }        numerator = a;        denominator = b;        yuefen();    }    // 将分数转换为double    public double toDouble() {        return (double) numerator / denominator;    }    // 将自身和r的分数相加,产生一个新的Fraction的对象    public Fraction plus(Fraction r) {        int newNumerator = this.numerator * r.denominator + this.denominator * r.numerator;        int newDenominator = this.denominator * r.denominator;        return new Fraction(newNumerator, newDenominator);    }    // 将自身和r的分数相乘,产生一个新的Fraction的对象    public Fraction multiply(Fraction r) {        int newNumerator = this.numerator * r.numerator;        int newDenominator = this.denominator * r.denominator;        return new Fraction(newNumerator, newDenominator);    }    // 输出分数    public void print() {        if (denominator == 0) {            System.out.println("错误,分母不能为0");            return;        }        if (numerator == 0) {            System.out.println(0);            return;        }        if (denominator == 1) {            System.out.println(numerator);            return;        }        System.out.println(numerator + "/" + denominator);    }    // 约分和调整负号    private void yuefen() {        int aa = (int) Math.abs(numerator);        int ab = (int) Math.abs(denominator);        if (numerator * denominator >= 0) {    // 调整负号            numerator = aa;            denominator = ab;        } else {            numerator = -aa;            denominator = ab;        }        for (int i = ((aa < ab) ? aa : ab); i > 1; i--) {    // 求最大公因数,并约分            if (numerator % i == 0 && denominator % i == 0) {                numerator /= i;                denominator /= i;                break;            }        }    }}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();    }}
请尝试使用修复后的代码,再次运行测试用例。如果仍然无法通过,请将具体的出错信息告诉我,我会继续帮助您调试。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-15 17:26:16 | 显示全部楼层
第1/5条 运行结果
运行结果正确

第2/5条 运行结果
运行结果错误,该组未通过

第3/5条 运行结果
运行结果错误,该组未通过

第4/5条 运行结果
运行结果错误,该组未通过

第5/5条 运行结果
运行结果正确
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-15 17:26:24 | 显示全部楼层
付大帅 发表于 2023-12-15 17:26
第1/5条 运行结果
运行结果正确

第2/5条 运行结果 ...

非常抱歉给出的代码仍然有误。以下是修复后的整体代码版本:import java.util.Scanner;class Fraction {    private int numerator;  // 分子    private int denominator;  // 分母    // 构造方法    public Fract

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-15 17:28:06 | 显示全部楼层
能否写成完整代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-15 17:28:34 | 显示全部楼层
付大帅 发表于 2023-12-15 17:28
能否写成完整代码

当然可以,以下是完整修复后的代码:
import java.util.Scanner;class Fraction {    private int numerator;  // 分子    private int denominator;  // 分母    // 构造方法    public Fraction(int a, int b) {        numerator = a;        denominator = b;        yuefen();  // 约分和调整负号    }    // 将分数转换为double    public double toDouble() {        return (double) numerator / denominator;    }    // 分数相加    public Fraction plus(Fraction r) {        int newNumerator = this.numerator * r.denominator + r.numerator * this.denominator;        int newDenominator = this.denominator * r.denominator;        return new Fraction(newNumerator, newDenominator);    }    // 分数相乘    public Fraction multiply(Fraction r) {        int newNumerator = this.numerator * r.numerator;        int newDenominator = this.denominator * r.denominator;        return new Fraction(newNumerator, newDenominator);    }    // 输出分数    public void print() {        if (denominator == 0) {            System.out.println("错误,分母不能为0");        } else if (numerator == 0) {            System.out.println(0);        } else if (denominator == 1) {            System.out.println(numerator);        } else {            System.out.println(numerator + "/" + denominator);        }    }    // 约分和调整负号    private void yuefen() {        int aa = (int) Math.abs(numerator);        int ab = (int) Math.abs(denominator);        if (numerator * denominator >= 0) {            numerator = aa;            denominator = ab;        } else {            numerator = -aa;            denominator = ab;        }        for (int i = ((aa < ab) ? aa : ab); i > 1; i--) {            if (numerator % i == 0 && denominator % i == 0) {                numerator /= i;                denominator /= i;                break;            }        }    }}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();    }}
请重新尝试运行并检查结果是否正确。如果仍然有问题,请告诉我具体的错误信息,我会尽力帮助您解决。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 21:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表