嘿,我正在参加一门CS课,最近我得到了一个小型实验室,该实验室大部分情况下非常简单。但是最后一部分让我搞砸了,我的代码是:
public Rational add(Rational a) {
Rational addRational = new Rational(a.getNumer() * this.getDenom() + this.getNumer() * a.getDenom(), a.getDenom() * this.getDenom());
return addRational;
}
由于某种原因,a.getNumer()和this.getNumer()返回相同的数字(a.getDenom()和this.getDenom()也是)。我应该修复什么,为什么会损坏?
以防万一,这是测试的一部分,说它失败了:
@Test
public void testL6Add() {
Random rnd = new Random(7);
Rational rationalValueA;
Rational rationalValueB;
Rational rationalAnswer;
int v1, v2, v3, v4;
for (int i=0; i<1000; i++) {
v1 = rnd.nextInt(500);
v2 = rnd.nextInt(500);
v3 = rnd.nextInt(500);
v4 = rnd.nextInt(500);
rationalValueA = new Rational(v1, v2);
rationalValueB = new Rational(v3, v4);
rationalAnswer = rationalValueA.add(rationalValueB);
assertEquals("Trying " + rationalValueA + " plus " + rationalValueB,
v1*v4 + v2*v3, rationalAnswer.getNumer());
assertEquals("Trying " + rationalValueA + " plus " + rationalValueB,
v2 * v4, rationalAnswer.getDenom());
}
我知道(或至少认为)问题是a.getNumer()返回与this.getNumer()相同的值,因为我使它输出(使用System.out.print)每个值并在测试v1和v2中被创建,但是当它在做Rational1.addRationa(rational2)时,它只是向其自身添加了Rational2
最佳答案
numer
类中的字段denom
和Rational
被声明为静态。这意味着该类的所有实例都使用相同的内存位置。因此,第二个实例已覆盖第一个实例的值。