Подскажите, что я не так написал?

Я написал код, который считает сумму массива массивов. Код рабочий, кроме строки, которую я пометил комментарием.

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 шт):

Автор решения: AVRamones

Ну если вы проверяете числа на четность в этой строке, то возможно стоит писать :

if(row is Int && (!(row % 2 == 0)))
→ Ссылка
Автор решения: woesss

Кроме синтаксиса, ошибка в том что вы объединили два условия в одно - в итоге блок 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
}
→ Ссылка