не обязательно ставить значение 2> значение 1 - PullRequest
1 голос
/ 05 мая 2020

Проблема: Предложите структуру, которая повторяется 5 раз и загружает в нее 3 целочисленных значения. Накапливайте только самое большое из каждого списка из трех значений.

У меня вопрос, потому что в этом упражнении нет необходимости помещать значение 2> значение 1.

fun main(parametro: Array<String>) {
var suma = 0
for(i in 1..5) {
    print("Ingrese primer valor:")
    val valor1 = readLine()!!.toInt()
    print("Ingrese segundo valor:")
    val valor2 = readLine()!!.toInt()
    print("Ingrese tercer valor:")
    val valor3 = readLine()!!.toInt()
    suma += when {
        valor1 > valor2 && valor1 > valor3 -> valor1
        valor2 > valor3 -> valor2
        else -> valor3
    }
}
println("El valor acumulado de los mayores de cada lista de 3 valores es : $suma")

}

Ответы [ 2 ]

3 голосов
/ 05 мая 2020
valor1 > valor2 && valor1 > valor3 -> valor1
  • Это верно, если и только если valor1 является наивысшим значением.
  • Если valor1 равно или меньше, чем valor2 или valor3 (или оба), то это ложь
valor2 > valor3 -> valor2
  • Если строка 1 ложна, тогда valor1 должно быть <= valor2 или valor3 (или обоими). ​​</li>
  • Тогда, если valor2> valor3, это также> = valor1 (потому что это было проверено в строке 1)
  • Если valor2 == valor3, то любой из них должен быть> = valor1, иначе Line1 будет истинным.

Что осталось, так это то, что valor1 может быть == valor3, и в этом случае не имеет значения, "возвращаете" вы valor1 или valor3. Line1 будет ложным, Line2 истинным, только если valor2>, чем valor1 и 3.

Для большей ясности:

Valor1 Valor2 Valor3 Line1  Line2 Result
  1      2      3    False  False Valor3 = 3
  1      3      2    False  True  Valor2 = 3
  3      2      1    True   -     Valor1 = 3 
  1      1      2    False  False Valor3 = 2
  1      2      1    False  True  Valor2 = 2
  2      1      1    True   -     Valor1 = 2
  2      1      2    False  False Valor3 = 2
  2      2      1    False  True  Valor2 = 2
  1      1      1    False  False Valor3 = 1
2 голосов
/ 05 мая 2020

Вы не сможете пройти первое условие оператора when, если valor1 наибольшее, поэтому нет логической причины снова проверять, может ли оно быть больше valor2.

Вы можно проще сравнить эти и любое количество элементов с

suma += intArrayOf(valor1, valor2, valor3).max()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...