我有点卡住了,我不知道如何让第二个循环在Kotlin的第一个循环上方1个位置开始。
我有一个包含10个元素的数组(名为myArray(,我需要编写一个Kotlin程序,打印数组中重复次数最多的数字,并打印它在序列中出现的次数。程序必须从左到右解析数组,这样,如果两个数字满足条件,则将打印从左到右侧第一个出现的数字。
最长:3
编号:8
fun main() {
val myArray: IntArray = intArrayOf(1,2,2,4,5,6,7,8,8,8)
for((index , value) in myArray.withIndex()){
var inx = index + 1
var count = 0
var longest = 0
var number = 0
for((inx,element) in myArray.withIndex()) {
if(value == element ){
count+=
}
}
if(longest < count){
longest = count
number = value
}
}
}
我反对放弃答案,但对我来说已经很晚了,所以我将把这个答案留在这里,明天编辑它,并提供有关每个部分如何工作的更多信息。我希望在这期间,它可能会帮助你了解自己可能会出错的地方。
val results = mutableMapOf<Int, Int>()
(0..myArray.size - 2).forEach { index ->
val current = myArray[index]
if (current == myArray[index + 1]) {
results[current] = (results[current] ?: 1) + 1
}
}
val (max, occurrences) = results.maxByOrNull { it.value } ?: run { println("No multiple occurrences"); return }
println("Most common consecutive number $max, with $occurrences occurrences")
或者,如果intArray
是一个列表,或者我们允许将其更改为列表myArray.toList()
,则可以用zipWithNext替换整个forEach
循环。但我很确定这是一个硬件问题,所以我怀疑这是预期的解决方法
myList.zipWithNext { a, b ->
if (a == b) results[a] = (results[a] ?: 1) + 1
}