
问这个问题的应高巧该都是新手,所以我就解释一下这个老哥写的代码意思
首先创建一个30长度的数组,遍历赋值,这个里面数字为1-30的数组就是取值范围
我们会从这个数组里取到我们需要的随机数.
然后创建一个7长度的答案数组,这个数组用来装答案.
生成随机数的random要放在for循环里面,每循环一次都能获得不同的随机数.
这里注意26行的randomNum--,每循环一次,我们的取值范围下标就提前一位,也就是说,第一次赋值,取值范围是30个数全部,第二次--之后变成了前29个数,每循环一次减去一,每次循环都把最后一位数剔除出取值范围
从取值范围数组里随机拿一个数放到答案数组第一位,然后这个数我们就跟最后一位数交换,
随后randomNum--,我们已经取过的这源升个数,跟最后一位数交换,而且退出了取值范围了,
举个例子,答案数组现在是空的{}, 取值范围数组现在有{1,2,3}
第一次循环之后,假如答案数组变成:{1},那个取值范围就变成了{3,2}1,已经取值过的1,因为randomNum--,已经跟最后一位交换并且剔除了.
就是孙谈从判指36个数中选出7个,这36个数是什么可以自己指定,但必须保证不重复,我写的一个代码则冲碰public
class
test
{
public
static
void
main(String[]
args)
{
int[]
a
=
new
int[36]
for(int
i
=
0
i
<
36
++i)
a[i]
=
i+1
for(int
i
=
0
i
<
5
++i)
randomSelect(a,
7)
}
static
void
randomSelect(int[]
a,
int
n)
{
randomShuffle(a,
7)
for(int
i
=
0
i
<
n
++i)
System.out.print(a[i]
+
"
")
System.out.println()
}
static
void
randomShuffle(int[]
a,
int
n)
{
for(int
i
=
0
i
<
n
++i)
{
int
r
=
(int)(Math.random()
*
a.length)
int
tmp
=
a[i]
a[i]
=
a[r]
a[r]
=
tmp
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)