刚刚学习JAVA2周,突然想到做一个彩票的开彩程序,搞半天搞不成功,看得别人写了一段代码,经过简单修改,得到下面:import java.util.*;
public class RandomTxt {
static int ball_set=10;
static int balls=40; public static void main(String[] args) {
int[] data = new int[balls ];
for(int k=0;k<balls;k++){
data[k]=k;
}
Random rand = new Random();
int irdm = 0;
for(int i = 0; i < ball_set; i ++) {
irdm = rand.nextInt(balls-i);
System.out.print(data[irdm]+" ");
for(int j = irdm; j < balls - i - 1; j ++) {
data[j] = data[j + 1];
}
}
}
}让我头大的是2个FOR循环,特别是最后一个循环for(int j = irdm; j < balls - i - 1; j ++) {
data[j] = data[j + 1];和第一个循环有什么回应呢?虽然通过分解运行知道,这个FOR是剔除重复元素用的,但是算法忍让百思不得其解,望大家赐教。另外:
import java.util.Random;
public class Randi {
static int ball_set=7;
static int balls=30;
public static void main(String[] args) {
Random rand=new Random();
int snum[]=new int[ball_set];
for(int i=0;i<snum.length;i++) {
int o= rand.nextInt(balls);
loop:
for(int j=0;j<snum.length;j++){
while(o==snum[j]){
o= rand.nextInt(balls);
continue loop;
}
}
snum[i]=o;
System.out.println("number="+snum[i]);
}
}
}
这个事我写了个另外的程序,这个程序为什么不能去除重复的数组元素呢?望各位赐教~~谢谢
public class RandomTxt {
static int ball_set=10;
static int balls=40; public static void main(String[] args) {
int[] data = new int[balls ];
for(int k=0;k<balls;k++){
data[k]=k;
}
Random rand = new Random();
int irdm = 0;
for(int i = 0; i < ball_set; i ++) {
irdm = rand.nextInt(balls-i);
System.out.print(data[irdm]+" ");
for(int j = irdm; j < balls - i - 1; j ++) {
data[j] = data[j + 1];
}
}
}
}让我头大的是2个FOR循环,特别是最后一个循环for(int j = irdm; j < balls - i - 1; j ++) {
data[j] = data[j + 1];和第一个循环有什么回应呢?虽然通过分解运行知道,这个FOR是剔除重复元素用的,但是算法忍让百思不得其解,望大家赐教。另外:
import java.util.Random;
public class Randi {
static int ball_set=7;
static int balls=30;
public static void main(String[] args) {
Random rand=new Random();
int snum[]=new int[ball_set];
for(int i=0;i<snum.length;i++) {
int o= rand.nextInt(balls);
loop:
for(int j=0;j<snum.length;j++){
while(o==snum[j]){
o= rand.nextInt(balls);
continue loop;
}
}
snum[i]=o;
System.out.println("number="+snum[i]);
}
}
}
这个事我写了个另外的程序,这个程序为什么不能去除重复的数组元素呢?望各位赐教~~谢谢
比如,随机到irdm=5,内曾循环做的事就是从下标为6的元素开始依次覆盖前一个值,也就是说如果irdm下次又随机到5,但这个值已经被下标为6的元素值覆盖,就避免重复了。
如果还不清楚就自己画一下图,就很清晰了。
建议兄弟 代码的格式规范一点要注意这有助于代码的理解!