在做随机数算法时,我要生成10个4位随机数,并且每个随机数的每一位都互不重复,我的程序代码如下,用了两个循环,先生成4个小于10的数字,并放于数组,让这四个数不重复,然后把这四个数 StringBuffer-->string-->Integer-->int,第二个循环用来生成这样的10个数,可是大部分可以实现,但是,还有少部分有重复:代码和结果如下:
mport java.util.Random;public class Random8 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub Random random = new Random();
int[] n = new int[4];
int i, j, m;
int target;
int total = 10;
// 用来判断生成的个数
for (m = 0; m < total; m++) {
StringBuffer sBuffer = new StringBuffer();
for (i = 0; i < 4; i++) {
// 避免首位为0
target = random.nextInt(8) + 1;
for (j = 0; j < i; j++) {
/*如果相等,就重新生成
我就纳闷,如果一直相等呢?
因为我生成的还有重复的,*/
if (target == n[j]) {
target = random.nextInt(7);
j = 0;
}
}
n[i] = target; sBuffer.append(n[i]); }
int s_to_4 = Integer.parseInt(sBuffer.toString());
System.out.println(s_to_4);
} }}结果:
3581
5148
6436
7154
2460
8231
1681
3421
5213
6456
难道第二个循环判断错了,不懂,望高人指教!!!
mport java.util.Random;public class Random8 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub Random random = new Random();
int[] n = new int[4];
int i, j, m;
int target;
int total = 10;
// 用来判断生成的个数
for (m = 0; m < total; m++) {
StringBuffer sBuffer = new StringBuffer();
for (i = 0; i < 4; i++) {
// 避免首位为0
target = random.nextInt(8) + 1;
for (j = 0; j < i; j++) {
/*如果相等,就重新生成
我就纳闷,如果一直相等呢?
因为我生成的还有重复的,*/
if (target == n[j]) {
target = random.nextInt(7);
j = 0;
}
}
n[i] = target; sBuffer.append(n[i]); }
int s_to_4 = Integer.parseInt(sBuffer.toString());
System.out.println(s_to_4);
} }}结果:
3581
5148
6436
7154
2460
8231
1681
3421
5213
6456
难道第二个循环判断错了,不懂,望高人指教!!!
解决方案 »
- 调了一天了也没成功 求解答 多谢!
- 字符串中去掉空格 输出!
- 怎么设置这样一个快捷键?请求帮忙啊!
- 关于J2SE的一个问题
- 有满足这样要求的开源ERP吗?
- 我想用java实现动画,当现在没什么头绪,请问有什么书或资料可以帮助我?java的基础类中有关绘图的类好像功能比较简单,有没有功能强大的
- 為什麼下面的代碼 appletviewer 不可執行。
- JBuilder可不可以生成脱离JDK运行的可执行文件?
- 求教前辈们一个关于finalize()的问题,谢谢大家帮助:)
- 如何让子窗体和父窗体联合在一起
- numIncre(“000099”) => “000100”,返回同闊度數字型字串,请教大家有什么更好的实现方法?
- 什么是复合类???
import java.util.ArrayList;
import java.util.List;
import java.util.Random;class TEST { public static void main(String args[]) {
System.out.println(getRandonNumber());
} public static List<Integer> getRandonNumber() {
List<Integer> list = new ArrayList<Integer>();
Random random = new Random();
int temp;
for (int i = 0; i < 4; i++) {
temp = random.nextInt(9001) + 999;
if (flg(temp, list))
list.add(temp);
}
return list;
} public static boolean flg(int n, List<Integer> list) {
boolean flg = true;
for (int i = 0; i < list.size(); i++)
if (n == list.get(i))
flg = false;
return flg;
}
}
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
public class Example
{
/**
* 获取[start,end]中的一个随即整数
* @param start
* @param end
* @return
*/
private static int getRandom(int start, int end)
{
return Double.valueOf(Math.random() * (end - start + 1)).intValue() + start;
}
private static void random()
{
Set<Integer> set = new LinkedHashSet<Integer>();
while (set.size() < 4)
{
if (set.size() == 0)
{
set.add(getRandom(1, 9));
}
set.add(getRandom(0, 9));
}
StringBuffer buf = new StringBuffer(4);
Iterator<Integer> it = set.iterator();
while (it.hasNext())
{
buf.append(it.next());
}
System.out.println(Integer.valueOf(buf.toString()));
}
public static void main(String[] args)
{
for (int i = 0; i < 10; i++)
{
random();
}
}
}
import java.util.*;
public class Randoms {
public static void main(String[] args) {
for(int i=0; i<10; i++) {
System.out.println(getNumber());
}
}
public static int getNumber() {
int [] seed = {0,1,2,3,4,5,6,7,8,9};
int [] ranArr = new int[4];
Random ran = new Random();
int result = 0;
for(int i = 0 ; i<4 ;){
int j = ran.nextInt(seed.length-i);
if(j==0 && i==0)continue;
ranArr [i] = seed [j];
seed [j] = seed [seed.length-1-i];
result = result*10 + ranArr[i];
i++;
}
return result;
}
}
方法一:
java.util.Set<Integer> set=new java.util.HashSet<Integer>();
for(;set.size()<10;)
{
int n=ran.nextInt(9000)+1000;//nextint(9000)产生的是<=0,<9000的一个随机数
set.add(n);//HashSet里的元素不是会重复的。重复的元素插入不进去
}
方法二:
java.util.List<Integer> list=new java.util.ArrayList<Integer>();
for(;list.size()<10;)
{
int n=ran.nextInt(9000)+1000;
if(!list.contains(n))//如果n不包涵在list中的话,才把n添加到list集合里边去
list.add(n);
}