Java 如何创建返回唯一随机数的函数?
我在论坛上尝试过一些解决方案,但对我不起作用,如果答案是用kotlin语言给出的,那么它将对我更有帮助。你可以使用递归函数来尝试,该函数只返回0到6范围内的唯一随机数Java 如何创建返回唯一随机数的函数?,java,android,kotlin,Java,Android,Kotlin,我在论坛上尝试过一些解决方案,但对我不起作用,如果答案是用kotlin语言给出的,那么它将对我更有帮助。你可以使用递归函数来尝试,该函数只返回0到6范围内的唯一随机数 private var randomNumber: Int = 0 private var integerList: MutableList<Int>? = null private fun getRandomNumber(): Int { val rand = Random() randomNumb
private var randomNumber: Int = 0
private var integerList: MutableList<Int>? = null
private fun getRandomNumber(): Int {
val rand = Random()
randomNumber = rand.nextInt(7)
if (integerList!!.contains(randomNumber)) {
getRandomNumber()
} else {
integerList!!.add(randomNumber)
}
return randomNumber
}
private-var-randomNumber:Int=0
私有变量整数列表:可变列表?=无效的
private fun getRandomNumber():Int{
val rand=Random()
randomNumber=rand.nextInt(7)
if(整数列表!!.contains(随机数)){
getRandomNumber()
}否则{
整数列表!!.add(随机数)
}
返回随机数
}
正如安德鲁·汤普森所说,你可以
- 在列表中按顺序添加范围中的每个数字
- 洗牌
- 从列表中选择前n个数字
import java.util.ArrayList;
import java.util.Collections;
public class UniqueRandomNumbers {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i=1; i<11; i++) {
list.add(new Integer(i));
}
Collections.shuffle(list);
for (int i=0; i<3; i++) {
System.out.println(list.get(i));
}
}
}
import java.util.ArrayList;
导入java.util.Collections;
公共类UniquerandomNumber{
公共静态void main(字符串[]args){
ArrayList=新建ArrayList();
对于(inti=1;i首先,我不建议为此使用函数,而是使用封装逻辑的类来提高可用性
第一选项
您可以使用List
函数(是的,它在这里实际上是一个函数)生成一个包含所有可能数字的列表,然后将其洗牌,然后对其进行迭代
class UniqueRandomNumbers(lowerBound: Int, upperBound: Int) {
private val iterator = List(upperBound - lowerBound) {
lowerBound + it + 1
}.shuffled().iterator()
val next get() = if (iterator.hasNext()) iterator.next() else null
}
第二选项
或者,您可以生成随机数,直到找到一个以前从未使用过的数字
class UniqueRandomNumbers(val lowerBound: Int, val upperBound: Int) {
private val consumedNumbers = mutableSetOf<Int>()
val next: Int?
get() {
var newNumber: Int
if (consumedNumbers.size == (upperBound - lowerBound + 1)) {
return null
}
do {
newNumber = Random.nextInt(lowerBound, upperBound + 1)
} while (newNumber in consumedNumbers)
consumedNumbers += newNumber
return newNumber
}
}
是的,有,但我没有发现它们有帮助。如果用户需要100万的整数,这可能会变得很麻烦。在这个例子中,什么是整数列表?为什么不使用映射进行更有效的查找?请参阅编辑的代码,整数列表是一个可变列表,将包含生成的随机数。数字应该是一个列表。为了改进如果您的答案有质量,请添加一些注释,说明此代码的作用以及它如何解决原始问题。
class UniqueRandomNumbers(val lowerBound: Int, val upperBound: Int) {
private val consumedNumbers = mutableSetOf<Int>()
val next: Int?
get() {
var newNumber: Int
if (consumedNumbers.size == (upperBound - lowerBound + 1)) {
return null
}
do {
newNumber = Random.nextInt(lowerBound, upperBound + 1)
} while (newNumber in consumedNumbers)
consumedNumbers += newNumber
return newNumber
}
}
val numberProvider = UniqueRandomNumbers(0, 2)
// returns 0, 1, 2 or null if all numbers have been consumed
numberProvider.next