日期:2014-05-20  浏览次数:20793 次

题目要求从三个班。每个班28个人,随机从这84个人中抽取学号,先随机班级,在随机每个班的1-28号,要求被随机到人不能再次被抽到
题目要求从三个班。每个班28个人,随机从这84个人中抽取学号,先随机班级,在随机每个班的1-28号,要求被随机到人不能再次被抽到------------------------我写的程序学生会重复 但是找不出原因  求大神指教
package test;

import java.util.Scanner;

public class StudentSelect {

public static void main(String[] args) {
int[][] st = new int[3][28];//记录学生
int[][] record = new int [3][28];//记录被抽到的学生
int [] c = {3,3,3};//记录班级
//赋值
for(int i = 0; i<3; i++){
for( int k = 0; k<28; k++){
st[i][k] = k+1;
}
}
//
System.out.println("抽几个人");
Scanner input = new Scanner(System.in);
int x = input.nextInt();
int m = x/28;
for(int clnumber = 0; clnumber <= m; clnumber++){
int a = (int)(Math.random()*3);
if(c[clnumber] == a){
a = (int)(Math.random()*3);
}
c[clnumber] = a;

if(x>28){
x = x-28;
for(int i = 0; i<28; i++){
selectclass(st,record,a);
}
}
else{
for(int i = 0; i<x; i++){
selectclass(st,record,a);
}
}

}

}

public static void selectclass(int[][] st,int[][] record,int a){
int x = 0;
int b = (int)(Math.random()*28);
//抽取学生和班级
for(int i = 0;i<=x;i++){//========xx
if(record[a][i] == st[a][b]){
b = (int)(Math.random()*28);
}
}
record[a][x++] = st[a][b];
System.out.println("抽到" + (a+1) + "班的 " + st[a][b]);
}

}

------解决方案--------------------
已经抽到的人要至个标志,下次不能再抽了,你可以用ArrayList来存放三个班级的学号,抽到了,就把这个学号从ArrayList中删除掉,这样就不会重复了,另外随机数获取用nextInt(ar.length()),ar是那个ArrayList对象。
------解决方案--------------------
import java.util.Random;
import java.util.Scanner;
public class Demo_one {
public static void main(String[] args) {
int[][] stubianhao=new int[3][28];
int k=1;
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
for(int i=0;i<3;i++){
for(int j=0;j<28;j++){
stubianhao[i][j]=k++;
}
}
System.out.println("请输入要删除的学生数量");
int num=input.nextInt();
Random rd=new Random();
int i=0;
while(i<num){
int x=rd.nextInt(3);  
int y=rd.nextInt(28);
if(stubianhao[x][y]==0){
continue;
}
System.out.println("删除学生的标号是:"+stubianhao[x][y]);
stubianhao[x][y]=0;
i++;
}
for(int l=0;l<3;l++){
for(int j=0;j<28;j++){
if(stubianhao[l][j]==0){
continue;
}
System.out.println("剩余学生的编号是"+stubianhao[l][j]);
}
}
}
}
------解决方案--------------------
我写的你看一下!