这段代码中的错误是什么

时间:2014-05-08 09:54:43

标签: java testing

我正在阅读测试的重要性,作为一个例子,这个代码出现了:

public Scheme join(final Scheme other) {
    final HashSet<Attribute> $ = new HashSet<Attribute>();

    for (int i = 0; i < attributes.length; ++i)
        $.add(attributes[i]);

    for (int i = 0; i < attributes.length; ++i)
        $.add(other.attributes[i]);
    return new Scheme(true, $.toArray(new Attribute[$.size()]));
}

它说它在Scehme.join()中有一个错误 但我看不到一个!

2 个答案:

答案 0 :(得分:4)

错误出现在你的第二个循环中:

// Here ------------v
for (int i = 0; i < attributes.length; ++i)
    $.add(other.attributes[i]);

应该是other.attributes,而不是attributes


这是一个很好的例子,说明为什么使用增强型for循环是一个好主意:

public Scheme join(final Scheme other) {
    final HashSet<Attribute> $ = new HashSet<Attribute>();

    for (Attribute attr : attributes) {
        $.add(attr);
    }

    for (Attribute attr : other.attributes) {
        $.add(attr);
    }

    return new Scheme(true, $.toArray(new Attribute[$.size()]));
}

答案 1 :(得分:1)

我的猜测将在这里

final HashSet<attribute> $ = new HashSet<Attribute>();

左侧有attribute,右侧有Attribute,而java是区分大小写的语言,这是两个不同的对象