鱼C论坛

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

设计一个表示分数的类Fraction

[复制链接]
 楼主| 发表于 2023-12-15 17:13:58 | 显示全部楼层
能否写成整体代码形式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

当然可以,以下是整体代码形式的修复后的版本:
  1. import java.util.Scanner;
  2. class Fraction {
  3.     private int numerator;  // 分子
  4.     private int denominator;  // 分母
  5.     // 构造方法
  6.     public Fraction(int a, int b) {
  7.         if (b == 0) {
  8.             System.out.println("错误,分母不能为0");
  9.             return;
  10.         }
  11.         numerator = a;
  12.         denominator = b;
  13.         yuefen();
  14.     }
  15.     // 将分数转换为double
  16.     public double toDouble() {
  17.         return (double) numerator / denominator;
  18.     }
  19.     // 将自身和r的分数相加,产生一个新的Fraction的对象
  20.     public Fraction plus(Fraction r) {
  21.         int newNumerator = this.numerator * r.denominator + this.denominator * r.numerator;
  22.         int newDenominator = this.denominator * r.denominator;
  23.         return new Fraction(newNumerator, newDenominator);
  24.     }
  25.     // 将自身和r的分数相乘,产生一个新的Fraction的对象
  26.     public Fraction multiply(Fraction r) {
  27.         int newNumerator = this.numerator * r.numerator;
  28.         int newDenominator = this.denominator * r.denominator;
  29.         return new Fraction(newNumerator, newDenominator);
  30.     }
  31.     // 输出分数
  32.     public void print() {
  33.         if (denominator == 0) {
  34.             System.out.println("错误,分母不能为0");
  35.             return;
  36.         }
  37.         if (numerator == 0) {
  38.             System.out.println(0);
  39.             return;
  40.         }
  41.         if (denominator == 1) {
  42.             System.out.println(numerator);
  43.             return;
  44.         }
  45.         System.out.println(numerator + "/" + denominator);
  46.     }
  47.     // 约分和调整负号
  48.     private void yuefen() {
  49.         int aa = (int) Math.abs(numerator);
  50.         int ab = (int) Math.abs(denominator);
  51.         if (numerator * denominator >= 0) {    // 调整负号
  52.             numerator = aa;
  53.             denominator = ab;
  54.         } else {
  55.             numerator = -aa;
  56.             denominator = ab;
  57.         }
  58.         for (int i = ((aa < ab) ? aa : ab); i > 1; i--) {    // 求最大公因数,并约分
  59.             if (numerator % i == 0 && denominator % i == 0) {
  60.                 numerator /= i;
  61.                 denominator /= i;
  62.                 break;
  63.             }
  64.         }
  65.     }
  66. }
  67. public class Main {
  68.     public static void main(String[] args) {
  69.         Scanner in = new Scanner(System.in);
  70.         Fraction a = new Fraction(in.nextInt(), in.nextInt());
  71.         Fraction b = new Fraction(in.nextInt(), in.nextInt());
  72.         a.print();
  73.         b.print();
  74.         a.plus(b).print();
  75.         a.multiply(b).plus(new Fraction(5, 6)).print();
  76.         a.print();
  77.         b.print();
  78.         in.close();
  79.     }
  80. }
复制代码

请尝试使用修复后的代码,再次运行测试用例。如果仍然无法通过,请将具体的出错信息告诉我,我会继续帮助您调试。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

第5/5条 运行结果
运行结果正确
小甲鱼最新课程 -> https://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 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-15 17:28:06 | 显示全部楼层
能否写成完整代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

当然可以,以下是完整修复后的代码:
  1. import java.util.Scanner;
  2. class Fraction {
  3.     private int numerator;  // 分子
  4.     private int denominator;  // 分母
  5.     // 构造方法
  6.     public Fraction(int a, int b) {
  7.         numerator = a;
  8.         denominator = b;
  9.         yuefen();  // 约分和调整负号
  10.     }
  11.     // 将分数转换为double
  12.     public double toDouble() {
  13.         return (double) numerator / denominator;
  14.     }
  15.     // 分数相加
  16.     public Fraction plus(Fraction r) {
  17.         int newNumerator = this.numerator * r.denominator + r.numerator * this.denominator;
  18.         int newDenominator = this.denominator * r.denominator;
  19.         return new Fraction(newNumerator, newDenominator);
  20.     }
  21.     // 分数相乘
  22.     public Fraction multiply(Fraction r) {
  23.         int newNumerator = this.numerator * r.numerator;
  24.         int newDenominator = this.denominator * r.denominator;
  25.         return new Fraction(newNumerator, newDenominator);
  26.     }
  27.     // 输出分数
  28.     public void print() {
  29.         if (denominator == 0) {
  30.             System.out.println("错误,分母不能为0");
  31.         } else if (numerator == 0) {
  32.             System.out.println(0);
  33.         } else if (denominator == 1) {
  34.             System.out.println(numerator);
  35.         } else {
  36.             System.out.println(numerator + "/" + denominator);
  37.         }
  38.     }
  39.     // 约分和调整负号
  40.     private void yuefen() {
  41.         int aa = (int) Math.abs(numerator);
  42.         int ab = (int) Math.abs(denominator);
  43.         if (numerator * denominator >= 0) {
  44.             numerator = aa;
  45.             denominator = ab;
  46.         } else {
  47.             numerator = -aa;
  48.             denominator = ab;
  49.         }
  50.         for (int i = ((aa < ab) ? aa : ab); i > 1; i--) {
  51.             if (numerator % i == 0 && denominator % i == 0) {
  52.                 numerator /= i;
  53.                 denominator /= i;
  54.                 break;
  55.             }
  56.         }
  57.     }
  58. }
  59. public class Main {
  60.     public static void main(String[] args) {
  61.         Scanner in = new Scanner(System.in);
  62.         Fraction a = new Fraction(in.nextInt(), in.nextInt());
  63.         Fraction b = new Fraction(in.nextInt(), in.nextInt());
  64.         a.print();
  65.         b.print();
  66.         a.plus(b).print();
  67.         a.multiply(b).plus(new Fraction(5, 6)).print();
  68.         a.print();
  69.         b.print();
  70.         in.close();
  71.     }
  72. }
复制代码

请重新尝试运行并检查结果是否正确。如果仍然有问题,请告诉我具体的错误信息,我会尽力帮助您解决。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-3 01:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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