Оператор «Не содержит» и «и / или» не работает должным образом в Котлине - PullRequest
0 голосов
/ 24 декабря 2018

оператор «отсутствует в списке» и «и / или» не работает в Kotlin

Привет,

В настоящее время я выполняю функцию случайного выбора
Приложение в случайном порядке перемешиваетчисло.

Если номер еще не в моем списке, я добавлю его
, если он уже существует, продолжите цикл while

var currentItem : Int = 0
var selectionList : MutableList<Int> = ArrayList()
var choiceItems : MutableList<NihongoLessonObject.LessonItems> = ArrayList()    



fun addingChoiceItems(lessonItems : NihongoLessonObject.JsonFetch) : MutableList<NihongoLessonObject.LessonItems>{
    while (choiceItems.size < 3) {
        var rnd = (0..9).random()
        if((rnd !in selectionList) and (currentItem !in selectionList)) {
            selectionList.add(rnd)
            choiceItems.add(getLessonItem(rnd, lessonItems))
        }
    }
    return choiceItems
}

номер, который уже существует в моем списке, все ещедобавлено.

иногда я также испытываю цикл навсегда, если currentItem и rnd равны.

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

иногда я также испытываю вечный цикл, если currentItem и rnd равны

Они не должны быть равными, чтобы испытать бесконечный цикл.Когда число 0 добавляется в список, тогда это условие

currentItem !in selectionList

всегда false делает все условие

(rnd !in selectionList) and (currentItem !in selectionList)

также false, поэтому циклбудет выполняться бесконечно.Непонятно, зачем вам нужен currentItem.Если вам нужно исключить его значение из чисел, добавленных в список, измените это:

currentItem !in selectionList

на следующее:

currentItem != rnd

число, которое уже существует в моем спискевсе еще добавлено

это то, что вам нужно отладить и выяснить, в каком случае это происходит.С предоставленным вами кодом это кажется невозможным. Важное примечание : не используйте битовый оператор and в логических выражениях.Используйте && (логический оператор AND). Редактировать Название вашего вопроса содержит "и / или" .... может быть вы пробовали or вместо and в состоянии?Если бы вы это сделали, вы могли бы получить дубликаты в списке.

0 голосов
/ 24 декабря 2018

Рассматривая ваши условия, я полагаю, что проблема связана с currentItem !in selectionList.

if((rnd !in selectionList) and (currentItem !in selectionList)) {
     selectionList.add(rnd)
     choiceItems.add(getLessonItem(rnd, lessonItems))
     // possibly update currentItem here.
}

Пока вы добавляете вещи в rnd в selectionList, вы не обновляете currentItem,currentItem всегда 0.

Я бы предложил добавить currentItem = rnd, но я считаю, что вы должны просто удалить currentItem все вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...