java代码出错分析

可以帮忙看看这个求分数加减乘除的代码哪里错了吗


package tow;
import java.util.Scanner;
public class Main {
     public static void main(String args[ ]) {
           Scanner reader=new Scanner(System.in);
         int a,b,c,d;
         a=reader.nextInt();b=reader.nextInt();
         c=reader.nextInt();d=reader.nextInt();
         Fraction f1=new Fraction(a,b);
         Fraction f2=new Fraction(c,d);
         Fraction f3=f1.add(f2);
         f3.print();
         Fraction f4=f1.sub(f2);
         f4.print();
         Fraction f5=f1.multi(f2);
         f5.print();
         Fraction f6=f1.divide(f2);
         f6.print();
                        //此处补充程序
                }
}
         
         class Fraction{
         int numerator;
         int denominator;
         Fraction(){}
         Fraction(int n,int d){
         numerator=n; denominator=d;
             }
         Fraction add(Fraction f2){
         Fraction f3=new Fraction();
         f3.numerator=numerator*f2.denominator+denominator*f2.numerator;
         f3.denominator=denominator*f2.denominator;
         return f3;
             }
         Fraction sub(Fraction f2){ //分数的减法运算
         Fraction f4=new Fraction();
         f4.numerator=numerator*f2.denominator-denominator*f2.numerator;
         f4.denominator=denominator*f2.denominator;
         return f4;
             }
         Fraction multi(Fraction f2){ //分数的乘法运算
         Fraction f5=new Fraction();
         f5.numerator=numerator*f2.numerator;
         f5.denominator=denominator*f2.denominator;
         return f5;
             }
         Fraction divide(Fraction f2){ //分数的除法运算
         Fraction f6=new Fraction();
         f6.numerator=numerator*f2.denominator;
         f6.denominator=denominator*f2.numerator;
         return f6;
             }
         void print(){
         reduction();
         //以下输出需要修改成符合题目要求的形式
         if(numerator==0)System.out.println("0");
         else if(denominator==1)System.out.println(numerator+"");
         else
         System.out.printf("%d/%d\n",numerator,denominator);
             }
         void reduction(){ //对分数进行约分,化成最简分数
         //请补充完整。此处直接对numerator和denominator进行约分
         //求分子分母的最大公约数,记为a
            int a,x,y;
         x=numerator;y=denominator;
         if(x<0) x=-x;
         if(y<0)
         {
          y=-y;denominator=-denominator;numerator=-numerator;
         a=x%y;
         while(a!=0)
         {
          x=y;y=a;a=x%y;
         }
         numerator=numerator/y;
         denominator=denominator/y; 
             }
         }
         

解决了么,留个方式详细说说

该回答引用ChatGPT

这个代码在处理分数的加、减、乘、除运算时没有考虑到分母为0的情况,这是会导致程序出错的。为了避免这种情况,需要在代码中添加分母为0的判断。

此外,题目要求输出的形式是整数、真分数或假分数的形式,但是这个代码在输出分数时,没有将分数化成最简分数的形式,需要在 print() 函数中添加对分数的约分操作。