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