判断是否重复报错
模仿双色球前6位package balls;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class balls {
public static void main(String[] args) {
List list=new ArrayList();
for (int i = 1 ; i <= 33; i++) {
list.add(i);
//System.out.println(list);
}
List balls=new ArrayList();
Random random=new Random();
for (int i = 0; i < 6; i++) {
int r=random.nextInt(list.size());
balls.add(list.get(r));
for(int j=0;j<6;j++){
if(list.get(r)==balls.get(j)){//现在得到的球和原来的数字对比不重复,此行代码报错
balls.remove(i);i--;
}
}
System.out.println(balls);
}
}
}
----------------解决方案--------------------------------------------------------
Random random=new Random();不能这样做,Random对象生成的随机数是伪随机数,是用算法产生满足某一规律的,你要产生不相同的随机数应该在Random对象中添加种子。Random random = new Random((new Date()).getTime());否则产生的随机数不能满足要求,会提示无穷递归的异常。
----------------解决方案--------------------------------------------------------
for (int i = 0; i < 6; i++) {
int r=random.nextInt(list.size());
balls.add(list.get(r));//i=0时,这是第一次添加,集合中只有一个元素
for(int j=0;j<6;j++){
if(list.get(r)==balls.get(j)){//i=0时,balls就一个元素,j的取值不仅是0,还有1,2,3,4,5
balls.remove(i);i--;//
}
}
System.out.println(balls);
}
----------------解决方案--------------------------------------------------------
验证最好用递归来做,这种循环你很难控制!
----------------解决方案--------------------------------------------------------
回复 4楼 烧包谷
好的谢谢~ ----------------解决方案--------------------------------------------------------
给楼主看看我以前写的类似的双色球代码
import java.util.Arrays;
import java.util.Random;
public class DoubleBallDemo {
public static void main(String[] args) {
String[] ticket = gen();
System.out.println(Arrays.toString(ticket));
}
public static String[] gen(){
String[] pool = {"01","02","03","04","05","06","07",
"08","09","10","11","12","13","14","15","16",
"17","18","19","20","21","22","23","24","25",
"26","27","28","29","30","31","32","33"}; //pool 池
boolean[] used = new boolean[pool.length];
Random random = new Random();
String[] balls = new String[6];//{^,^,^,^,^,^}
int i=0;
for(;;){//while(true) == for(;;)
int index = random.nextInt(pool.length);
if(used[index]){ continue; }
balls[i++] = pool[index];
used[index]=true;
if(i==balls.length){ break; }
}
Arrays.sort(balls);
balls = Arrays.copyOf(balls, balls.length+1);
balls[balls.length-1] = pool[random.nextInt(16)];
return balls;
}
}
----------------解决方案--------------------------------------------------------
回复 2楼 烧包谷
程序代码:
public Random() { this(++seedUniquifier + System.nanoTime()); }
无参数的构造函数也被java加上了系统时间变量
----------------解决方案--------------------------------------------------------