java小项目:抽签小程序

介绍

分别有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组已抽出的结果全部对比完						
				}
			}
		}
	}
}

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值