请问用java从1-33个整数中随机抽取6个数字 且不重复 该怎么写?

请问用java从1-33个整数中随机抽取6个数字 且不重复 该怎么写?,第1张

public static void main(String[] args) {
int[] x = new int[33]; //创建值为1-33的整数表, 初始化
for (int i = 0; i < xlength; i++) {
x[i] = i+1;
}
// -------------------------------------------------
for (int i = 0; i < 6; i++) { // 随机取值6次 (你可以把6改成33 试试看会不会出现重复值)
int j = (int) (Mathrandom()(33-i)); // 随机值依次递减1, 以保证不可能重复随机到33这个值
Systemoutprintln("第" + (i+1) + "个随机数为: "+ x[j]);// 输出随机值(真正的随机值为整数表x中的数)
x[j] = x[33-i-1]; // 整数表x中已被随机到的值替换为表中最后一个数, 避免以后可能随机到
}
// -------------------------------------------------
// 整个思路你可以想象成是栈堆的出栈, 随机到的值出栈, 就不会随机到重复值
}
有问题欢迎继续提问, 希望能帮你解决问题!

public class GenerateRandomLetterAndNum {
public static void main(String[] args) {
Set<String> store = getletterandnum(6);
printSet(store);
}
public static Set<String> getletterandnum(int length) {
Set<String> set =new HashSet<String>();
for (int i = 0; i < length; i++) {
String value = getrandom();
setadd(value);
}
if (setsize()<length) { //如果没有生成6位
String value = getrandom();//继续调用生成随机数的方法
setadd(value);
}
return set;
}
private static String getrandom() { //生成随机字母和数字方法
String value = "";
Random random = new Random();
int gen = randomnextInt(2);//0、1、2
String charornum = gen % 2 == 0 "char" : "num";
if ("char"equals(charornum)) {
int temp = randomnextInt(2) % 2 == 0 65 : 97;
int ascii = randomnextInt(26);
value += (char) (ascii + temp);
} else if ("num"equalsIgnoreCase(charornum)) {
value += StringvalueOf(randomnextInt(10));
}
return value;
}
public static void printSet(Set set){ //打印set的方法
Iterator iterator = setiterator();
while (iteratorhasNext()) {
String ele = (String) iteratornext();
Systemoutprint(ele+" ");
}
}

import javautilArrayList;
import javautilCollections;
import javautilRandom;
public class asd {
/
  @param args
 /
@SuppressWarnings("unchecked")
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList al=new ArrayList();
ArrayList al1=new ArrayList();
for(int i=0;i<36;i++)//此处可以改为i<6,每次运行都输出123456表示正确
{
aladd(i+1);//集合中存放1-36
}
Random nd=new Random();

for(int i=0;i<6;i++)
{
int te=ndnextInt(alsize())+0;//生成一个随机数,随机数取值为0-集合的下标
al1add(alget(te));//把取得的数存到另一个集合,因为你要排序,集合的sort方法比较给力
alremove(te);//将取得的数移除,以免取到相同的数
}
Collectionssort(al1);//将取得的六个数进行从小到大的排序
Systemoutprintln(al1);

}
}

可以用Mathrandom()函数生成一个随机数,然后检查位数,如果位数不符合要求,就重新生成一个随机数,下面的程序是一个实现。<pre t="code" l="java">public class RandomTest
{
public static int rand(int n)
{
int ans = 0;
while(Mathlog10(ans)+1<n)
ans = (int)(Mathrandom()Mathpow(10, n));
return ans;
}
public static void main(String[] args)
{
for(int i=0;i<1000;i++)
{
Systemoutprintln(rand(4));
}
}
}

按照你的要求从1到10随机选一个数并输出,然后再执行一次,保证与上次的不重复的Java程序如下

public class GG {
 public static void main(String[] args) {
  int n=0;
  int count=1;//生成的随机数计数
  int tmp=(int)(Mathrandom()10)+1;//产生1-10的随机数
  while(count<3){//生成两个不重复的随机数
   if(tmp==n){//如果生成的随机数与上一个相等,重新生成随机数
    tmp=(int)(Mathrandom()10)+1;//产生1-10的随机数
   }else{
    n=tmp;
    Systemoutprintln(n);
    count++;
   }
  }
 }
}
运行结果
3
9

当然可以到 6 的。
5 余 6 就是 5,再加 1 就是 6。
但是一般用 Random 类。给你一个Demo:
import javautilRandom;
public class RandomDemo {
public static void main (String args[]) {
Random rnd = new Random();
int n = rndnextInt(6) + 1; // nextInt(int x) 返回 0~(x-1) 之间的随机数。
Systemoutprintln(n);
}
}

javautilRandom r = new javautilRandom();
a=Mathabs(rnextInt() % (6)+1);

a就是你想要的随机数


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

原文地址: http://outofmemory.cn/yw/12605758.html

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

发表评论

登录后才能评论

评论列表(0条)

保存