求java中随机生成1到n之间不同的t个整数的方法

2024-11-22 12:15:30
推荐回答(5个)
回答(1):

public int[] fn(int n,int t)
{
ArrayList numbers=new ArrayList();
int[] rtnumbers=new int[t];
for(int i=0;i numbers.add(i+1);
}
for(int j=0;j int raNum=(int)(Math.random()*numbers.size());
rtnumbers[j]=numbers.get(raNum);
numbers.remove(raNum);
}
return rtnumbers;
}
思路就是一开始把数放到一个list中,然后根据随机生成下标数raNum,从list中取出数放到rtnumbers中,再把list中的这个数删除,以便达到不重复目的. 楼上几个写的根本不对,不知所云

回答(2):

public class SampleRun {
public static void main(String[] args) {

int[] array = fn(100,20);
for(int i = 0;i < array.length;i++){
System.out.println(array[i]);
}

}
public static int[] fn(int n,int t){
if(n < t)
return new int[0];
else{

Set set = new HashSet();
int length = 0;
while((length = set.size())< t){
int raNum=(int)(Math.random()*n)+1;
set.add(raNum);
}
//将Set转化为数组
int[] array = new int[t];
Integer[] intArray = new Integer[t];
intArray = set.toArray(intArray);
for(int i = 0;i < t;i++){
array[i] = intArray[i].intValue();
}
return array;
}
}
}

为了不重复,首先要保证n > t,其次可以考虑用Set,因为集合里的元素不能重复的,你就不断产生随机数往集合里加直到集合的元素个数为t。而且用set的好处是不需要多余判断,我觉得是最合理的处理方式。

回答(3):

public class Test {
public static void main(String[] args) {
//程序入口,调用随即函数
fn(400, 10);
}

// 从1到n(包含n)之间随机的不重复的t个整数,最好写在一个方法里,如
public static int[] fn(int n, int t) {
//实例化数组,长度为t
Random r = new Random();
int tem[] = new int[t];
//循环从1到n
for (int i = 1; i < n; i++) {
//生成t个整数
if (i <= t) {
//生成1到n之间的随机数
int result = r.nextInt(n);
for (int j = 0; j < tem.length; j++) {
//循环判断,如果生成的随机数在数组中不存在并且随机数不等于0,则向数组中添加
if (result != tem[j]&&result!=0) {
tem[i-1] = result;
}
}
}
}
for (int j = 0; j < tem.length; j++) {
System.out.println(tem[j]);
}
return tem;
}
// 返回一个整形数数组
// 求java代码
}

回答(4):

用arrayList吧,数组长度是固定的,初始化的时候比较麻烦,我也没试
如public arrayList fn(int n,int t)
{
arrayList al=new arrayList();
for(int i=0;iint raNum=(int)(Math.random()*n)+1;
al.add(raNum);
}
return al;
}
这个我也没试,不过应该可以

回答(5):

public int [] fn(int n ,int t){
int [] retValue = new int[t];
ArrayList al = new ArrayList();
for (int i = 0; i int tempValue = (int)Math.round(Math.random()*n);
if(tempValue>1&&tempValue<=n&&!al.contains(""+tempValue)){
al.add(""+tempValue);
}else{
i--;
}
}
for (int i = 0; i < al.size(); i++) {
retValue[i]=Integer.parseInt(""+al.get(i));
}
return retValue;
}