List sortList(List list1){
def sorted = []
while(list1){
def lowest
for(n in list1){
if(!lowest || lowest == null || n < lowest) lowest = n
}
sorted.add(sorted.size, lowest)
list1.remove(list1.indexOf(lowest))
}
return sorted
}
def odds = [0,-6,2]
assert sortList(odds) == [-6,0,2]
上面的代码对整数进行排序。这是CoderDojo中为孩子们设置问题的解决方案。它正确地对整数列表进行排序,但是如果列表中有0,则当n <1时,条件语句返回true。最低,(当n == 2且最低== 0时)。下面是代码运行时控制台的输出。
Caught: Assertion failed:
assert sortList(odds) == [-6,0,2]
| | |
| [] false
[-6, 2, 0]
Assertion failed:
assert sortList(odds) == [-6,0,2]
| | |
| [] false
[-6, 2, 0]
at TonyZeroTest.run(TonyZeroTest.groovy:19)
at RunScript.run(RunScript.groovy:66)
Process exited with code: 1
任何帮助理解这一点将不胜感激。
答案 0 :(得分:3)
这一行存在问题:
if(!lowest || lowest == null || n < lowest) lowest = n
当lowest
= 0时发生。我不确定为什么要测试!lowest
和lowest == null
。当lowest
为0时,!lowest
为真,并且您将lowest
重新分配给n
的任何值,无论它是否小于当前lowest
{1}}(0)。
只需删除!lowest
条件,就应该做得很好。
有关!lowest == true
原因的更多信息,请点击此处:http://groovy-lang.org/semantics.html#Groovy-Truth
答案 1 :(得分:0)
移动我的评论回答:
我不知道groovy是如何工作的,但我会假设!lowest
评估!0
=&gt; true
,因此当前一个值为0
时,要检查的下一个值将变为最低值。
也许初始化最低为null,然后只检查它是否为空或更低:
def lowest = null
for(n in list1){
if(lowest == null || n < lowest) lowest = n
}