Bài tập về Class Phân số, không rõ em bị sai ở chỗ nào

Khi chạy chương trình này, em không hiểu sao mà khi chạy đến hàm tính tổng xong thì chương trình cũng kết thúc, bỏ qua tính hiệu, tích và thương mà em đã viết
mong mọi người giúp em ạ

 public class PhanSo {
       
         private int tu, mau;
         PhanSo(){
         }
         PhanSo(int t, int m) {
          tu=t;
          mau=m;
         }
         static int nhapgt() throws IOException{
             InputStreamReader isr = new InputStreamReader(System.in);
             BufferedReader br = new BufferedReader(isr);
             String str=br.readLine();
             return Integer.valueOf(str).intValue();
         }
         PhanSo nhapps(int x) throws IOException{
             int tu,mau;
             System.out.println("Nhap Phan so thu I");
             System.out.println("Tu so: ");
             tu=nhapgt();
             System.out.println("Mau so: ");
             do{
                 mau=nhapgt();
                 if(mau==0){
                     System.out.println("Nhap lai Phan So");
                 }
            }while(mau==0);
                 PhanSo ps =new PhanSo(tu, mau);
                 return ps;   
         }
         
         public void setTu(int tu)
         {
          this.tu=tu;
         }
         public void setMau(int mau)
         {
          this.mau=mau;
         }
         public int getTu()
         {
          return this.tu;
         }
         public int getMau()
         {
          return this.mau;
         }
         public void Hienthi(PhanSo ps) {
             System.out.println(this.tu+"/"+this.mau);
         }
         public int USCLN(int a, int b)
         {
          while( a != b )
          {
            if( a > b ){ 
                a = a - b;
            }
            else{ 
                b = b - a;
            }
          }
            return a;
         }

         public void rutGon(PhanSo ps)
         {
            int i = USCLN( this.getTu(),this.getMau() );
            this.setTu( this.getTu()/i );
            this.setMau( this.getMau()/i );
            System.out.println("Phan so da toi gian: " + ps.tu + "/" + ps.mau);
         }
         public void congPS(PhanSo ps)
         {
          int a = ( this.getTu() * ps.getMau() ) + ( ps.getTu() * this.getMau() );
          int b = ps.getMau() * this.getMau();
          PhanSo k = new PhanSo( a , b );
          k.rutGon( ps );
          System.out.println("Ket qua cong: " + k.tu + "/" + k.mau);
         }
         public void truPS(PhanSo ps)
         {
          int a = ( this.getTu() * ps.getMau() ) - ( ps.getTu() * this.getMau() );
          int b = ps.getMau() * this.getMau();
          PhanSo k = new PhanSo(a,b);
          k.rutGon(ps);
          System.out.println("Ket qua tru : " + k.tu + "/" + k.mau);
         }
         public void nhanPS(PhanSo ps)
         {
          int a=ps.tu*this.tu;
          int b=ps.mau*this.mau;
          PhanSo k=new PhanSo(a,b);
          k.rutGon(ps);
          System.out.println("Ket qua nhan: " + k.tu + "/" + k.mau);
         }
         public void chiaPS(PhanSo ps)
         {
          int a=this.tu*ps.mau;
          int b=this.mau*ps.tu;
          PhanSo k=new PhanSo(a,b);
          k.rutGon(ps);
          System.out.println("Ket qua chia: " + k.tu + "/" + k.mau);
         }
             
}
public static void main(String[] args) throws IOException{
        PhanSo ps1= new PhanSo();
        PhanSo ps2= new PhanSo();
        ps1=ps1.nhapps(1);
        ps2=ps2.nhapps(2);
        ps2.Hienthi(ps2);
        ps1.Hienthi(ps1);
        ps1.rutGon(ps1);
        ps2.rutGon(ps2);
        ps1.congPS(ps2);
        ps1.truPS(ps2);
        ps1.chiaPS(ps2);
        ps1.nhanPS(ps2);
  }
}

sai ở hàm USCLN, thử vứt 1 và -2 xem treo ngay:
USCLN(1,-2)

1 Like

vậy em nên sửa lại phần hàm USCLN sao cho đúng ạ

Thay bằng int i = USCLN(abs(this.getTu()), abs(this.getMau()));

3 Likes

Chạy được rồi ạ, cảm ơn các bác đã giúp em

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?