Подскажите, что я не так написал?
Я написал код, который считает сумму массива массивов. Код рабочий, кроме строки, которую я пометил комментарием.
fun main() {
val list = mutableListOf<Any>() list.add(listOf(3,4,2,
listOf<Any>(34,4,4, listOf(1, 22),221,2212))) list.add(listOf(23,4,2,
listOf<Any>(34,4,4, listOf(1, 22),221,2212))) list.add(listOf(2,
listOf<Any>(34,4,4, listOf(1, 22),221,2212),65,65))
list.add(listOf(3,4,2, listOf<Any>(34,4,4, listOf<Any>(1,
22),221,2212,43,34), 122,212)) list.add(listOf(3,4,2,
listOf<Any>(34,4,4, listOf(1, 22),221,2212)))
println(resultList(list)) }
fun resultList(l: List<Any>): Int {
var result = 0
for(row in l){
if(row is Int && (!(row / 2))) **//кроме этой строки**
result += row
else
result += resultList(row as List<Any>)
}
return result }
Если убрать && (!(row / 2)), то код полностью рабочий. Но когда я захотел добавить в параметры if сортировку по делению на 2, код перестал работать. Изначально просто суммировались все числа массива и мне надо сделать так, чтобы суммировались только нечетные числа. В чем проблема кода - я не понимаю, поскольку я написал в параметрах нужную мне задачу.
fun main() {
val list = mutableListOf<Any>() list.add(listOf(3,4,2,
listOf<Any>(34,4,4, listOf(1, 22),221,2212))) list.add(listOf(23,4,2,
listOf<Any>(34,4,4, listOf(1, 22),221,2212))) list.add(listOf(2,
listOf<Any>(34,4,4, listOf(1, 22),221,2212),65,65))
list.add(listOf(3,4,2, listOf<Any>(34,4,4, listOf<Any>(1,
22),221,2212,43,34), 122,212)) list.add(listOf(3,4,2,
listOf<Any>(34,4,4, listOf(1, 22),221,2212)))
println(resultList(list)) }
fun resultList(l: List<Any>): Int {
var result = 0
for(row in l){
if(row is Int)
result += row
else
result += resultList(row as List<Any>)
}
return result }
Если код будет выглядеть вот так, то он будет рабочим.
Ответы (2 шт):
Ну если вы проверяете числа на четность в этой строке, то возможно стоит писать :
if(row is Int && (!(row % 2 == 0)))
Кроме синтаксиса, ошибка в том что вы объединили два условия в одно - в итоге блок else выполняется и для вложенного массива и для нечётных чисел, что и вызывает ошибку времени выполнения, так как нечётное число не является массивом и код row as List<Any> не может быть выполнен
fun resultList(l: List<Any>): Int {
var result = 0
for(row in l) {
if(row is Int) {
if (row % 2 != 0) {
result += row
}
} else {
result += resultList(row as List<Any>)
}
}
return result
}