比较数字并将其保存在Kotlin的数组中



2零件问题

第一部分 - 我想请用户提供一个数字,然后创建一个数组,该数组的位置与介绍的数字一样多,我该怎么做?

第二部分 - 数组将被随机数填充,但i 不需要重复的数字。这是我的代码,它继续注册重复数字

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
        }
    }
}

我在做什么错?

要记住的一件事是,如果您试图在一个范围内生成随机数,但没有重复,则需要确保至少是随机数的范围等于目标阵列的大小。

例如,如果您试图生成一个尺寸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()
}

这还避免了浪费的废弃重复随机数,并确保函数调用需要确定的时间来执行。

您可以向用户询问此类数组的项目数:

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()

相关内容

  • 没有找到相关文章

最新更新