我遇到了这个问题:“你的函数接收两组 Int。返回第一组中的一组新元素,这些元素是第二组大小的倍数。” 它来自 Hyperskill,我创建的代码虽然在 IntelliJ 中正确运行,但未被接受。可能是什么问题?
fun solution(first: Set<Int>, second: Set<Int>): Set<Int> {
val tempSet = mutableSetOf<Int>()
var finalSet = emptySet<Int>()
var isDiv = false
for (f in first) {
for (s in second) {
if(f % s == 0){
isDiv = true
if(s == second.last()){
tempSet.add(f)
}
} else { break }
}
isDiv = false
}
finalSet = tempSet
return finalSet
}
脱离措辞,第一组的值是第二组的Size的倍数,可以像这样完成吗?
注意:这些都没有经过测试***
fun solution(first: Set<Int>, secondSize: Int): Set<Int> {
val mResult = mutableSetOf<Int>()
// Loop through first set, checking if they are
// multiples of second sets Size
first.forEach { value ->
if (value % secondSize == 0) {
mResult.add(value)
}
}
// Return the resulting set
return mResult
}
或者,如果您需要查看每个索引处的值是否是第二组中任何值的倍数,就像您当前的代码一样,您可以这样做
fun solution(first: Set<Int>, second: Set<Int>): Set<Int> {
val mResult = mutableSetOf<Int>()
// Loop through first set
first.forEach { value ->
// Loop through second, checking each value against the value from first,
// also check if resulting set already contains said value so we don't
// end up with multiples of the same value
second.ForEach {
If (value % it == 0 && !mResult.contains(it)) {
mResult.add(value)
}
}
}
// Return the resulting set
return mResult
}
我在手机上输入了此内容,因此请仔细检查是否有拼写错误。如果您不熟悉以及其他可能不知道的人,Kotlin 有一些您可以利用的漂亮东西。如果可能的话,我更喜欢使用 .forEach,它可以节省一些输入,并且当您回顾代码时更容易阅读。如果您需要知道循环的索引,可以使用 .forEachIndexed 但这并不适用于所有情况。您需要指定索引的名称和值,如下所示:
mSomeList.forEachIndexed { index, value ->
// Do something with index and value
}
如果列表包含该值,则使用 mResult.contains(it) 返回 true,这似乎很清楚。但是添加一个!一开始基本上会让它返回相反的结果。这与 == 和 != 是相同的概念。