Есть ли проблема с условным выражением - PullRequest
0 голосов
/ 17 июня 2020

Напишите программу, которая читает слово и печатает все буквы, которых нет в этом слове. Учитываются только строчные буквы.

Я думал, что он удалит привет из a..z, вместо этого он выводит true

val input = Scanner(System.`in`)
val inp = input.nextLine() //hello
val alp = mutableListOf('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z')

for (i in inp) {
    if (i in alp) {
        val a = alp.remove(i)
        print(a)
    }
}

Ответы [ 2 ]

1 голос
/ 17 июня 2020

MutableList.remove() возвращает логическое значение, указывающее, нужно ли удалить какие-либо экземпляры. И вы каждый раз печатаете значение. Поскольку вы повторяете входное слово, вы сможете печатать только те буквы, которые были в слове, из l oop. Чтобы исправить свой код, вам нужно будет изменить его следующим образом:

for (i in inp) {
    alp.remove(i)
}
println(alp.joinToString(""))

Но было бы проще использовать функцию filterNot в алфавитном диапазоне Char.

val alp = ('a'..'z').filterNot { it in inp }
println(alp.joinToString(""))
1 голос
/ 17 июня 2020
val notInWord = CharRange('a','z').run { 
     minus(input.asSequence())
 }.also { 
     it.forEach { ch ->print(ch) }
 }

Вот некоторые примечания:

  1. Создание CharRanage для всех строчных букв (эквивалент ('a'..'z'))
  2. Использование Minus с вводом пользователя как Sequence<Char>, чтобы вернуть список, содержащий все элементы исходной коллекции, кроме элементов, содержащихся в данной последовательности.
  3. Перебрать List и распечатать элементы, используя also в качестве последнего блока
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...