Kotlin: оператор '! =' Нельзя применить к строке 'String?' и 'Char.Companion' - PullRequest
0 голосов
/ 02 августа 2020

В этой игре «Палач», как я могу задать условие для проверки, если input! = Char? Он говорит, что Kotlin: оператор '! =' Не может быть применен к 'String?' и 'Char.Companion'

Как решить эту проблему?

        while (letters != correctGuesses) {
            printExploredWord(word, correctGuesses)
            println("\n#Wrong guesses: $fails\n\n")
    
            print("Guess letter:")
            val input = readLine()
    
            if (input == null) {
                continue
            } else if (input.length != 1) {
                println("Please enter one letter")
                continue
            } else if (input != Char) {
                println("Please enter a character")
            }
            if (word.toLowerCase().contains(input.toLowerCase())) {
                correctGuesses.add(input[0].toLowerCase())
            } else {
                ++fails
            }
    
    

Ответы [ 2 ]

2 голосов
/ 02 августа 2020

Судя по вашим комментариям, вы хотите проверить, есть ли во вводе String? единственный символ alphabeti c. Вы должны быть точны в своей терминологии. Цифры и знаки препинания также состоят из символов. Char - это класс, представляющий любой элемент из String, поэтому нет смысла спрашивать, является ли что-то в String Char, потому что ответ верен, несмотря ни на что.

Вопрос, который вам нужно задать, заключается в том, является ли первый символ в данной строке буквой . Для этого есть функция: Char.isLetter(). И поскольку мы проверяем содержимое первого символа String, нам нужно получить его значение с помощью input[0], потому что нет смысла спрашивать, является ли вся String буквенным символом. String никогда не является Char, потому что это разные классы. Итак, в вашем случае вы должны использовать:

if (input == null) {
    continue
} else if (input.length != 1) {
    println("Please enter one letter")
    continue
} else if (!input[0].isLetter()) {
    println("Please enter a character")
    continue
}

Но опять же, здесь неверная терминология. Вы должны напоминать пользователю ввести букву, а не символ.

0 голосов
/ 02 августа 2020

Ваша входная переменная имеет тип String ?, поэтому нет причин проверять, является это символом или нет. Чтобы проверить instanceof в Kotlin, вы используете оператор «is». Итак, чтобы сравнить, если ваш ввод является Char, вы можете сделать,

else if(!(input is Char)) {
   //This is unnecessary though since you're already checking if the length of the input isn't 1
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...