Było to proste pytanie o wojny kodowe, ale mój kod daje niewłaściwą odpowiedź dla największej wartości i najmniejszej wartości. Sprawdziłem każdą sekcję, ale nie mogę sprawić, by to działało. Spojrzałem na rozwiązania tego problemu, ale chciałem dowiedzieć się, co robiłem źle w pierwszej kolejności.

fun highAndLow(numbers: String): String {

    val splitNum = numbers.split(" ")

    var largestNum = splitNum[0]
    var smallestNum = splitNum[0]

    for (num in splitNum) {

        if (largestNum < num) {
            largestNum = num
        }
        
        if (num < smallestNum) {
            smallestNum = num
        }
    }

    return "$largestNum $smallestNum"

}

fun main() {
    print(highAndLow("8 3 -5 42 -1 0 0 -9 4 7 4 -4 9"))

}

Oczekiwany wyjście: 42 -9

Aktualny wyjście: 9 -1

0
AM_Codin 13 kwiecień 2021, 17:09

1 odpowiedź

Najlepsza odpowiedź

Porównujesz ciąg, a nie liczby całkowite. Użyj Toint (), aby przekształcić ciąg w liczbę całkowitą.

    val splitNum = numbers.split(" ").map { it.toInt() }

Trochę wskazówki przy okazji: Być może kod może być jeszcze bardziej zoptymalizowany. Spójrz tutaj:

https://kotlinlang.org/api/latest/jvm/stdlib/kotlins.Collections/min-by-or-noull.html.

I

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.Collections/max-by-or-noull.html.

1
Twistleton 13 kwiecień 2021, 14:36