付大帅 发表于 2023-12-15 17:13:58

能否写成整体代码形式

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

付大帅 发表于 2023-12-15 17:26:16

第1/5条 运行结果
运行结果正确

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

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

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

第5/5条 运行结果
运行结果正确

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

付大帅 发表于 2023-12-15 17:28:06

能否写成完整代码

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。
页: 1 [2]
查看完整版本: 设计一个表示分数的类Fraction