返回首页

我有一个方法,检查对象的属性满足一些要求,它返回true,如果有的话,否则为false。但该函数返回总是假的,即使参数是正确的。这里是我做工作的原代码和解决方法,但我仍然不知道问题的根源,所以我张贴在这里看到,如果有人能够理解这个问题。

类包含类SacVariable的ArrayList中,也有方法isValid()的。如果在ArrayList所有SacVariable对象是有效的,那么这个大家伙是有效的,太。完美的作品,在测试过程中的SacVariable.isValid()返回真或假的情况。但如果内部循环总是读假...


// Original code (does not work because always returns false)

public boolean isValid()

    {

        if (!this.getList().isEmpty())

        {

            for (SacVariable var : this.getList())

            {

                if (!var.isValid())

                {

                    return false;

                }

            }

            return true;        

        }

        return false;

    }

我认为逻辑是清楚的,但我会解释为清晰的缘故。
如果ArrayList是空(大小== 0)我什么都不做,马上返回false。
如果有是在ArrayList中的东西,我检查每一个来看看他们是有效的,如果至少有1是假的,然后我立即返回false。如果循环结束,然后我返回true,因为它意味着所有的对象SacVariable是有效的。

{C}
周围的工作是相同的,我最初分离条件的改善,希望找到问题的可读性,失败的,所以我决定增加一个计数器,如果validConditions == this.getList()的大小(),那么我知道所有SacVariables是有效的。它的工作...为什么没有其他方式?它可能是令人难以置信的小型或琐碎,但我的生活,我无法看到它。

SacVariable.isValid()并不总是返回假。我检查。这里的奥秘是,尽管事实上,该方法确实返回true循环被打破。

我不寻求替代代码给我的人,我只希望大家在这里看到,如果有人发现了一个与代码的问题表明,该方法。

回答

评论会员:游客 时间:2012/02/05
纳吉Vilmos:我认为这应该:codeprelang="java"spanclass="code-keyword"public/spanspanclass="code-keyword"boolean/spanisValid(){spanclass="code-keyword"if/span(spanclass="code-keyword"this/span.getList().isEmpty()){spanclass="code-comment"///spanspanclass="code-comment"Therearenoitemsinthelist/spanspanclass="code-keyword"return/spanfalse;} spanclass="code-keyword"for/span(SacVariablevar:spanclass="code-keyword"this/span.getList()){spanclass="code-keyword"if/span(!var.isValid()){spanclass="code-comment"///spanspanclass="code-comment"thisitemisinvalidergothewholelistisinvalid/spanspanclass="code-keyword"return/spanfalse;}} spanclass="code-comment"///spanspanclass="code-comment"everyiteminthelistisvalid/spanspanclass="code-keyword"return/spantrue;}/pre/code如果它不那么试试这个:{体C3}你不应该需要继续循环,一旦你发现一个无效的项目
TorstenH
评论会员:游客 时间:2012/02/05
对我来说这听起来像SacVariable.isValid()始终返回false。检查之一