Kotlin код дублирует строку в консоли самостоятельно (циклически перебирая функцию без ввода данных пользователем) - PullRequest
0 голосов
/ 18 апреля 2020

Позвольте мне сначала поставить код, а затем объяснить:

    fun main() {

    loop@ while (true){
        println("Input the action (add, remove, import, export, ask, exit):")
        val userInput = scanner.nextLine()
        when (userInput){
            "add" -> add()
            "remove" -> remove()
            "import" -> import()
            "export" -> export()
            "ask" -> ask()
            "exit" -> {
                print("Bye bye!")
                break@loop
            }
        }
    }
}

Это основная функция, в которой пользователь выбирает то, что он хочет сделать. Сначала он добавляет несколько карточек, которые содержат термины и определения в виде пар, но это не имеет значения. Проблема заключается в том, что при использовании функции ask ().

fun ask() {

    println("How many times to ask?")
    for (i in 0 until scanner.nextInt()){
        for ((key,value) in map){
            println("Print the definition of \u0022$key\u0022:")
            var userAnswer = (readLine() ?: "exit").toString()
            if (userAnswer == value) {
                println("Correct answer.")
                continue
            }
            else {
                loop@ for ((key2,value2) in map){
                    if(map.containsValue(userAnswer) && userAnswer == value2){
                        println("Wrong answer. The correct one is \u0022$value\u0022, you've just written the definition of \u0022$key2\u0022")
                        break@loop
                    }else if (!map.containsValue(userAnswer)) {
                        println("Wrong answer. The correct one is \u0022$value\u0022.")
                        break@loop
                    }
                }
            }
        }
    }
}

Код работает и все, но после , выполняющего функцию ask (), только когда программа возвращается в исходное состояние main () , выводит «Введите действие (добавить, удалить, импортировать, экспортировать, спросить, выйти):« дважды вместо один раз . Мой друг сказал мне, что это может быть пустой ввод, оставленный в кэше, который вызывает это, так что он проходит один раз через main (), фактически не принимая пользовательский ввод.

Пожалуйста, если у кого-то есть опыт с этим, я был бы очень признателен, чтобы услышать и узнать об этом и о том, как это предотвратить, потому что это мешает мне завершить проект. Будет ли меняться способ получения справки по вводу данных пользователями?

...