-1

如果你调用第一个方法,'CreateLotsOfAlphas',它应该打印什么?我只是在遵循程序流程时遇到了麻烦。我以为它会打印 aabbc,但由于某种原因,它实际上会打印 bacbc。

我的理由是 newA1.y 最初只是输入 a,因为它是空值。a 保存到 this.y 中,所以 newA2.y 是 (a + b),b 保存到 this.y 中,然后 newA3.y 是 (b + c) 得到 aabbc。

我看错了吗?

public void CreateLotsOfAlphas() {
    Alpha newA1 = new Alpha(1.0, "a", null); 
    Alpha newA2 = new Alpha(2.0, "b", newA1); 
    Alpha newA3 = new Alpha(3.0, "c", newA2);
    System.out.println(newA1.y + newA2.y + newA3.y);
}

顺便说一下,这两种方法属于两个不同的类。

public Alpha(double x, String y, Alpha oldAlpha) { 
    this.x = x;
    this.y = y;
    w = (int) x;
    if (oldAlpha != null) { 
        oldAlpha.y = y + oldAlpha.y;
    } 
}
4

4 回答 4

1

在打印声明时

newA3.y = 'c'
newA2.y = 'cb'
newA1.y = 'ba'
于 2012-12-12T05:28:29.463 回答
1
Alpha newA1 = new Alpha(1.0, "a", null);
// oldAlpha == null so we only newA1.y = "a"
Alpha newA2 = new Alpha(2.0, "b", newA1);
// oldAlpha is newA1 => newA1.y = "b"+"a"; newA2.y = "b"
Alpha newA3 = new Alpha(3.0, "c", newA2);
// oldAlpha is newA2 => newA2.y = "c"+"b", newA3.y = "c"; newA1.y = "ba" (still)
System.out.println(newA1.y + newA2.y + newA3.y);
// newA1.y = "ba", newA2.y = "cb", newA3.y = "c"

……够清楚了吗?

于 2012-12-12T05:33:28.277 回答
0

这是因为null在您第一次调用构造函数时,它无法进入此 if 条件或 if 条件不执行

if (oldAlpha != null) { 
        oldAlpha.y = y + oldAlpha.y;
    } 
于 2012-12-12T05:25:41.230 回答
0

只有当旧的 Alpha 不为空时,你才会真正打印一些东西。

Alpha newA1 = new Alpha(1.0, "a", null);  //no old Alpha
Alpha newA2 = new Alpha(2.0, "b", newA1); // newA1.y = bc as newA1 is Old alpha
Alpha newA3 = new Alpha(3.0, "c", newA2); // newA2.y = cb as newA2 is Old alpha

所以:

 System.out.println(
                newA1.y //bc as written above
              + newA2.y //cb as written above
              + newA3.y //only c as newA3 is never oldAlpha so it contains only self value
              ); 

我希望这足够清楚:)。

于 2012-12-12T05:30:25.607 回答