为什么这不起作用? (a.getNumer()和this.getNumer()返回相同的值)

时间:2014-10-22 19:20:12

标签: java

嘿,我参加过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添加到自身

1 个答案:

答案 0 :(得分:1)

numer类中的字段denomRational被声明为静态字段。这意味着相同的内存位置用于该类的所有实例。因此第二个实例覆盖了第一个实例的值。