Позвольте мне сначала поставить код, а затем объяснить:
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 (), фактически не принимая пользовательский ввод.
Пожалуйста, если у кого-то есть опыт с этим, я был бы очень признателен, чтобы услышать и узнать об этом и о том, как это предотвратить, потому что это мешает мне завершить проект. Будет ли меняться способ получения справки по вводу данных пользователями?