сравните числа и сохраните их в массиве в Котлине - PullRequest
0 голосов
/ 26 февраля 2019

2 части вопроса

Первая часть - я хотел попросить пользователя дать число, а затем создать массив с таким количеством позиций, как введенное число, как я могу это сделать?

Вторая часть - массив должен быть заполнен случайными числами, но я не хочу повторяющихся чисел .Это мой код, и он продолжает регистрировать повторяющиеся номера

var A = intArrayOf(0,0,0,0,0,0)
for (i in 0..A.size - 1) {
    val rnd = (0..10).random()
    for (j in 0..A.size-1) {
        if (rnd == A[j]){
            break
        }
        else{
            A[i] = rnd
            break
        }
    }
}

что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Следует иметь в виду, что если вы пытаетесь генерировать случайные числа в пределах диапазона, но не имеете дубликатов, вам необходимо убедиться, что диапазон случайных чисел по крайней мере равен размеру целевого массива.,

Например, если вы пытаетесь сгенерировать массив размером 12 с диапазоном от 0..10, это невозможно сделать, так как существует только 11 возможностей.

В зависимости от ваших требований (диапазон от 0 до размера массива?), Если пространство чисел мало, вы можете немного упростить это, перетасовав список из rangeStart..rangeEnd:

/**
 * Generates an array of unique random numbers between zero and the larger of
 * arraySize or upperBound. If upperBound is not specified, it defaults to be
 * arraySize.
 *
 * @param arraySize the size of the returned integer array
 * @param upperBound an optional upper bound for the range of random numbers
 */
fun generateArray(arraySize: Int, upperBound: Int = size): IntArray {
  return (0..Math.max(upperBound, arraySize)).shuffled().take(arraySize).toIntArray()
}

Это также позволяет избежать расточительного генерирования отброшенных дубликатов случайных чисел и гарантирует, что вызов функции занимает определенное количество времени для выполнения.

0 голосов
/ 26 февраля 2019

Вы можете запросить у пользователя количество элементов массива, например:

var n = 0

println("Number of items in the array = ")
try {
    n = readLine()!!.toInt()
} catch (e: Exception) {
}

Теперь массив будет инициализирован, если n является положительным целым числом, а затем заполнен случайным неповторяющимся целым числомчисла:

if (n > 0) {
    val array = IntArray(n) // initialize an array of n items all being 0

    val r = Random() // create a random numbers generator
    array.indices.forEach {
        var newInt = 0
        while (array.contains(newInt)) { newInt = r.nextInt() }
        array[it] = newInt
    }
    array.forEach { print("$it ") }
}

С помощью contains() вы можете проверить, существует ли уже новое сгенерированное случайное число в массиве (это означает, что массив будет заполнен ненулевыми целыми числами).Если вы хотите, чтобы случайные числа находились в определенном диапазоне, вместо:

newInt = r.nextInt()

используйте:

newInt = r.nextInt((upperBound + 1) - lowerBound) + lowerBound

или для версии Kotlin 1.3 +:

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