java关于函数方面的问题

import java.util.Scanner;

class Fraction {
int fenzi;
int fenmu;
Fraction(int a,int b){
this.fenzi = a;
this.fenmu = b;

}
void print(){
    System.out.println(fenzi+"/"+fenmu);
}
Fraction plus(Fraction r){
    r.fenzi = r.fenzi*this.fenmu + this.fenzi*r.fenmu;
    r.fenmu = r.fenmu * this.fenmu;
    return r;
}
Fraction multiply(Fraction r){
    r.fenzi = r.fenzi * this.fenzi;
    r.fenmu = r.fenmu * this.fenmu;
    return r;
}

public static void main(String[] args) {
    // TODO 自动生成的方法存根
    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();
}

}
函数plus我想做的事两个分数相加,请问是哪里错了 函数里的this.分母是a的分母还是r得分母

this指该对象 a.plus(b).print();
a对象调用了plus函数,
在plus函数中this就是指代a对象a和this等价的,
b对象是传入到plus函数中在plus函数中b和r是等价的

懂了,参数列表中传入的变量是一个指针,
你将b当做参数传入到函数中,对r的操作就是对b的操作,在a.plus(b)函数中你对r进行了赋值操作,所以会对b的fenzi和fenmu进行修改
在之后的操作中b的值就变了不是开始的1/3,所以结果就错了
建议:Fraction plus(Fraction r){
Fraction result = new Fraction();//这边新建一个对象用于返回结果 不会改变a,b的数据
result.fenzi = r.fenzi*this.fenmu + this.fenzi*r.fenmu;
result.fenmu = r.fenmu * this.fenmu;
return result;
}
Fraction multiply(Fraction r)这个函数也是一样得修改

public class Fraction {

    int fenzi;
    int fenmu;
    public Fraction() {//提供一个空的构造函数
    }
    Fraction(int a,int b){
    this.fenzi = a;
    this.fenmu = b;
    }
    void print(){
        System.out.println(fenzi+"/"+fenmu);
    }
    Fraction plus(Fraction r){
        Fraction fraction = new Fraction();//新建对象用于输出
        fraction.fenzi = r.fenzi*this.fenmu + this.fenzi*r.fenmu;
        fraction.fenmu = r.fenmu * this.fenmu;
        return fraction;
    }
    Fraction multiply(Fraction r){
        Fraction fraction = new Fraction();//新建对象用于输出
        fraction.fenzi = r.fenzi * this.fenzi;
        fraction.fenmu = r.fenmu * this.fenmu;
        return fraction;
    }

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        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();
    }

}

2
4
1
3
2/4
1/3
10/12
72/72
2/4
1/3

我靠,你这代码虽然能实现效果但是写的不好,为了方便更改计算逻辑,你不应该把计算步骤写在构造函数里面,应该写一个方法或者静态工厂方法。