gpt4 book ai didi

即使我可以看到列表中的项目,Groovy 断言包含失败

转载 作者:行者123 更新时间:2023-12-05 00:27:54 26 4
gpt4 key购买 nike

Groovy 断言包含:

assert testList.contains(4)
| |
| false
[1, 2, 6, 3, 4]

我要疯了吗?

这是测试代码:
    List testList = tester.getFactors(12)
assert testList.size() == 5
assert testList.contains(1)
assert testList.contains(2)
assert testList.contains(3)
assert testList.contains(4)
assert testList.contains(6)

如果我删除除 contains(4) 和 contains(6) 之外的所有内容,它们中的一个或两个都会失败。

这是 getFactors 方法:
 List getFactors(int number)
{
def retList = new ArrayList();
(1..Math.sqrt(number)).each() { i ->
if(number % i == 0)
{
//add both the number and the division result
retList.add(i)
if(i>1)
retList.add(number / i)
}
}
retList;
}

任何想法都非常感谢。

最佳答案

如果你这样做:

println getFactors( 12 )*.class.name

你可以看到:
[java.lang.Integer, java.lang.Integer, java.math.BigDecimal, java.lang.Integer, java.math.BigDecimal]

所以 64BigDecimal实例,而不是 Integer实例

所以 contains失败(因为您正在寻找 Integer(6) 而不是 BigDecimal(6)
如果你改变:
            retList.add(number / i)

到:
            retList.add(number.intdiv( i ) )

然后你的结果将保持为整数,你的断言应该有效:-)

顺便说一句,只是为了好玩,您的函数可以重写为:
List getFactors( int number ) {
(1..Math.sqrt(number)).findAll { i -> number % i == 0 }
.collectMany { i ->
if( i > 1 ) {
[ i, number.intdiv( i ) ]
}
else {
[ i ]
}
}
}

关于即使我可以看到列表中的项目,Groovy 断言包含失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19688472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com