переменная доступа внутри массива [Kotlin] - PullRequest
0 голосов
/ 11 июля 2020

Это программа, использующая массив для хранения беговых дорожек. fun printMaxMinPath() - это распечатать самый длинный и самый короткий пути. Мои вопросы:

  1. как я могу получить доступ к длине Runningpath и найти максимальное и минимальное значение? если я напишу код, как показано ниже, строки 19, 20 не будут работать, так как «длина» является неразрешенной ссылкой. но я не знаю, как мне писать (или какие ключевые слова использовать в Google).

  2. как я могу получить доступ к имени и месту самого длинного и самого короткого пути бега, чтобы распечатать их внутри printMaxMinPath()? $ min.name не будет работать

Любые подсказки приветствуются. Спасибо за вашу доброту.

мои коды с ошибками компиляции следующие:

 class  Runningpath(val name: String, val length: Int, val spot: String){                              
            override fun toString(): String= "The path $name ($length m) is near $spot"                       
                                                                                                                                                                                                       
            fun printMaxMinPath (p: Array<Runningpath> , min:Int, max:Int) {                                  
                println("The shortest path is with $min m. It is the path $name near $spot")                  
                println("The longest path is with $max m. It is the path $name near $spot")                   
                                                                                                              
            }                                                                                                 
        }                 
        
        fun main() {                                                                                          
            println("Warming up")                                                                             
            val input1 = Runningpath("in Forest", 2000, "some houses")                                        
            val input2 = Runningpath("at lake", 1500, "a school")                                             
            val input3 = Runningpath("in mountain", 2800, "under sky")                                        
            val path = arrayOf(input1, input2, input3)                                                        
                                                                                
    line19   val max = path.length.max()                                                                       
        20   val min = path.length.min()                                                                       
            input1.printMaxMinPath(path, min, max)                                                            
        }                                                                                                     
                                             

                                                             
                                      

                     

                         

1 Ответ

1 голос
/ 11 июля 2020

Вы можете использовать maxBy и minBy из стандартной библиотеки kotlin, чтобы получить объект, имеющий максимальную и минимальную длину, а затем использовать их свойства для вывода их значений.

data class Runningpath(val name: String, val length: Int, val spot: String)

fun main() {
    println("Warming up")
    val input1 = Runningpath("in Forest", 2000, "some houses")
    val input2 = Runningpath("at lake", 1500, "a school")
    val input3 = Runningpath("in mountain", 2800, "under sky")
    val paths = arrayOf(input1, input2, input3)

    printMaxMinPath(paths)
}

fun printMaxMinPath(paths: Array<RunningPath>) {
    val max = path.maxBy { it.length }
    val min = path.minBy { it.length }
    println("The shortest path is with ${min.length} m. It is the path ${min.name} near ${min.spot}")
    println("The longest path is with ${max.length} m. It is the path ${max.name} near ${max.spot}")
}

Изменить: minBy и maxBy могут возвращать null, если предоставленный массив был нулевым. Вы должны безопасно утверждать их, вы можете сделать это перед печатью чего-либо, как показано ниже.

fun printMaxMinPath(paths: Array<RunningPath>) {
    val max = path.maxBy { it.length }
    val min = path.minBy { it.length }
    min?.run { println("The shortest path is with $length m. It is the path $name near $spot") }
    max?.run { println("The longest path is with $length m. It is the path $name near $spot") }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...