介绍
分别有A、B两组。尽量让您手中的项目抽中同一组,但是出厂的顺序不同
注意
1.建立的java文件,要与代码中的public class 名相同
2.package 包名; 要与自己建立的相同
3.通过下面标红的A、B两组总的容纳空间
源代码
package program;
import java.io.*;
import java.util.Random;
import java.util.Scanner;
public class test {
public static void main(String[] args)throws IOException {
test cq=new test(); //因为要调用方法CQ,(注意:
//方法要写在主函数外面,public class er_jin_zhi_tuxiang里面)
int xiangmushu=0;
int m=0; //记录A组已经出来几个序号了
int m1=10; //A组能容纳的空间大小
int[] xuhaoA=new int[10]; //存放A组抽出的序号 (注意:eclipse中空数组中的值默认的是0)
int n=0; //记录B组已经出来几个序号了
int n1=10; //B组能容纳的空间大小
int[] xuhaoB=new int[10]; //存放B组抽出的序号(注意:eclipse中空数组中的值默认的是0)
int q;
String A="A";
String B="B";
Scanner reader=new Scanner(System.in);
Random r=new Random();
for(int i=0;i==0;) { //实现下一个人的抽签
System.out.print("您的项目有几个:");
q=reader.nextInt();
xiangmushu=xiangmushu+q;
if(xiangmushu<=20){
for(int iii=0;iii==0;) { //如果一个组满了,或不够了;再重新抽组
int a=r.nextInt(2);
if(a==0) { //0表示的是A组
if(m1>=q) { //保证A组剩余的空间大于此人所有项目所需要的序号数
iii=1;
cq.CQ(A,q,m,xuhaoA);
m=m+q; //保证m比上一人抽出的结果所存入的最后一个数组的序号大1(注意:数组的序号是从0开始的)
//这里要说明以下为什么方法中已对m做出变化,这里还要在多此一举呢?原因很简单,在测试中发现对于赋初始值变量,即使在方法中有改变其初始值的操作,
//当下次调用此方法时,变量的值还是保持其初始值
m1=m1-q; //表示A组的剩余空间少一个
}
else {
if(n1<q) {
xiangmushu=xiangmushu-(q-m1);
iii=1;
cq.CQ(A,m1,m,xuhaoA);
System.out.println("还有"+(q-m1)+"个项目未抽签!");
m1=0; //A组空间用完
}
}
}
else {
if(n1>=q) {
iii=1;
cq.CQ(B,q,n,xuhaoB);
n=n+q;
n1=n1-q;
System.out.println(n);
}
else {
if(m1<q) {
xiangmushu=xiangmushu-(q-n1);
iii=1;
cq.CQ(B,n1,n,xuhaoB);
System.out.println("还有"+(q-n1)+"个项目未抽签!");
n1=0; //B组空间用完
}
}
}
}
if(xiangmushu==20) break;
else {
System.out.println("是否继续(是 或 否)?");
String t=reader.next();
if("否".contentEquals(t)) break;
}
}
else {
System.out.println("项目超额!!");
System.out.println("是否继续(是 或 否)?");
String t=reader.next();
if("否".contentEquals(t)) break;
else xiangmushu=xiangmushu-q;
}
}
}
public void CQ(String Zu,int qq,int nm,int[] xuhao){ //Zu代表组,qq代表项目数,nm代表Zu组出来的序号数
Random r=new Random();
for(int ii=0;ii<qq;ii++) { //保证有几个项目抽几次
int a1=r.nextInt(10)+1;//1.保证a1属于1到10;2.若不加1,a1属于0到9,那么0与数组默认值冲突,
for(int aa=0;aa<10;) { //会导致for(int aa=0;aa<10;)出现bug
if(xuhao[aa]==a1) {
aa=10; //结束筛选
ii--; //抽重了,那么这次作废,重新开抽
}
else {
if(aa==nm) { //保证把所以抽出的结果全部对比一边,没有重复的,则这次抽出的结果有效
xuhao[aa]=a1;
System.out.println("抽签结果:"+Zu+""+xuhao[aa]);
nm++; //这一条语句必须有,因为如果一个人有三个项目,若没有这条语句,那么在这个方法结束前nm的不会改变,
//使得三个抽签结果都将写入同一个数组空间,且上一次的结果将会被下一次的结果所覆盖,这显然不是我们想要的结果
aa=10;
}
else aa++; //说明还没把所有Zu组已抽出的结果全部对比完
}
}
}
}
}