写一彩票程序,要求能随机产生并按照升序输出1-30之间的7个数,且其中任意两个数字不能重复,Java程序

写一彩票程序,要求能随机产生并按照升序输出1-30之间的7个数,且其中任意两个数字不能重复,Java程序,第1张

一楼的老哥给的答案戚裂键是没问题的,而且最妙的就是那个26行的(randomNum--)

问这个问题的应高巧该都是新手,所以我就解释一下这个老哥写的代码意思

首先创建一个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

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12384063.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存