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 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就是你想要的随机数
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)