import java.util.Random
import java.util.Vector
public class RanNum {
public Vector<Integer>a//定义一个向量,用于动态数组的存储
public void RandomNum(int n, int m){
//随机数的范围,可以生成10 个0-100的数,那么n=10,m=100.
Random ran = new Random()
a = new Vector<Integer>()
int ra = ran.nextInt(m)
a.add(ra) //先生成第一位随机数,后面就有的比较了。
for (int i = 0i <ni++) {
int r = ran.nextInt(m)
for (int j = 0j <ij++) {
if (a.get(j) == r) { //一旦发现有重复的数,立即结束循环,并重新执行第j步
i--
break
} else { //只要没有重复,那么就在第i个位置写入新数据。多次反复j遍
if (a.size() >i)
a.set(i, r)
else
a.add(r)
}
}
}
for (int i = 0i <ni++) {
System.out.print(a.get(i) + " ")
}
}
public static void main(String[] args){
RanNum RN = new RanNum()//生成新对象
RN.RandomNum(10, 10) //根据自己要求选择不重复随机数的个数和范围,范围>=个数
}
}
sum=(int)(Math.random()*33 + 1) 就是取一个int值 在1-33之间! 第一次的时候 a[0]-a[5] 都是0所以那个for一定不会进! 从第二次开始 a[0]-a[5]就开始有值了, 那么就拿sum值 用for循环 去和a[0]-a[5]依次进行比较, 如果发现有想同的,说明随机数重复了, 那么这一次寻找就不算数,就要进行i--的操作 同时 将标志值设为0,不入到a[]数组中~ 就这个意思了!importjava.util.Random
public
class
Rand
{
public
static
void
main(String[]
args)
{
//产生随机数的类
Random
random=new
Random()
//装随机数的数组
10个整数
int[]
num=new
int[10]
//临时存放产生的一个随机数
int
ret=0
//定义标志位,flag=false代表数组中无重复数,true代表有重复数
boolean
flag=false
for
(int
i
=
0
i
<
num.length)
{
//产生随机数
ret=Math.abs(random.nextInt()%10)+1
//循环检测该随机数是否与数组中的数重复
for
(int
j
=
0
j
<
num.length
j++)
{
//如果存在重复,标志位变为true,并且break退出循环检测
if
(ret==num[j])
{
flag=true
break
}else
{
flag=false
}
}
//如果检测完无重复数据,则将产生的随机数存入数组中,并且数组下标计数加1
if
(!flag)
{
num[i]=ret
i++
}
}
//循环输出产生的随机数
for
(int
i
:
num)
{
System.out.print(i+"
")
}
}
}
输出:6
3
5
1
4
10
7
9
8
2
有不明白的请继续问