A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kira 中级黑马   /  2014-3-7 11:53  /  958 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何伟超 于 2014-3-8 15:09 编辑

银行项目系统有一处不理解
我写到窗口类里面
  1. import java.util.Random;
  2. import java.util.concurrent.Executors;

  3. public class serviceWindow {
  4.         private Customer cust=Customer.COMMON;//默认为普通
  5.         private int WindowID = 1;//定义提个窗口号码
  6.         public void setCust(Customer cust) {
  7.                 this.cust = cust;
  8.         }
  9.         public void setWindowID(int windowID) {
  10.                 WindowID = windowID;
  11.         }

  12.         //这里设立一个启动方法
  13.         public void start(){
  14.                 Executors.newSingleThreadExecutor().execute(new Runnable() {
  15.                         
  16.                         @Override
  17.                         public void run() {
  18.                                 // TODO Auto-generated method stub
  19.                                 //这里一定是不停的取号
  20.                                 while(true){
  21.                                         switch(cust){
  22.                                         case COMMON:
  23.                                                 String windowName = "第"+WindowID+"号"+cust+"窗口";
  24.                                                 System.out.println("正在获取任务");
  25.                                                 Integer  commonNumber =                 NumberMachine.getIntance().getCommonManager().fetchServiceNumber();//拿到普通用户号码
  26.                                                 if(commonNumber!=null){
  27.                                                         long starttime =  System.currentTimeMillis();
  28.                                                         int costTime = timeCount.MaxServiceTime-timeCount.MinServiceTime;
  29.                                                         long servicetime =new Random().nextInt(costTime)+1;
  30.                                                         try {
  31.                                                                 Thread.sleep(servicetime);//服务
  32.                                                         } catch (InterruptedException e) {
  33.                                                                 // TODO Auto-generated catch block
  34.                                                                 e.printStackTrace();
  35.                                                         }
  36.                                                         long  time = System.currentTimeMillis()-starttime;
  37.                                                         System.out.println(windowName+"为第"+commonNumber+"个"+cust+"客户进行服务 耗时:"+time+"秒");
  38.                                                         
  39.                                                 }
  40.                                                 else{
  41.                                                         
  42.                                                         System.out.println("没有取到号");
  43.                                                 }
  44.                                         break;
  45.                                         case VIP:
  46.         int VIPNumber =         NumberMachine.getIntance().getVipManager().fetchServiceNumber();//拿到VIP用户号码
  47.                                                 break;
  48.                                         case EXPRESS:
  49.         int ExpressNumber =                NumberMachine.getIntance().getExcepressManager().fetchServiceNumber();//拿到快速用户号码
  50.                                         }
  51.                                 }
  52.                                 
  53.                         }
  54.                 });
  55.                
  56.                
  57.         }

  58. }
复制代码
这个里面有个 long servicetime =new Random().nextInt(costTime)+1; 服务时间
当然 我们前面也定义了一个类
  1. public class timeCount {
  2.         public static int MaxServiceTime=10000;//设置最大时间
  3.         public static int MinServiceTime=1000;//设置最小时间

  4. }
复制代码
这个是设置最大最小时间的
我想问的是 new Random().nextInt(costTime)不就是1000-9000的随机值 么 后面加上timeCount.MinServiceTime
是1-10000的话 那么
  1. long servicetime =new Random().nextInt(costTime)+1+timeCount.MinServiceTime;
复制代码

这里的 +1 是否多余了呢  求大神解答:)

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

7 个回复

正序浏览
因为随机数是从0开始的,如果你的数是100,那么范围就是0-99,所以后面要加1.要不然你就取不到1-100的随机值。
回复 使用道具 举报
kira 中级黑马 2014-3-7 17:27:03
7#
何清林 发表于 2014-3-7 17:19
ew Random().nextInt(costTime)是0到8999,二加1才是1-9000

OK 解决了:)
回复 使用道具 举报
一年_Hei 发表于 2014-3-7 15:20
nextInt()包含头不包尾,例如:new Random().nextInt(10) 它产生的随机数是0~9,所以得加1 ...

这个我知道 我前面纠结的是 如果1000对于1 过大的话 1就能不能忽略不计的问题 这个已经解决了
回复 使用道具 举报
chaos 发表于 2014-3-7 12:48
Random().nextInt(costTime)返回一个0~costTime之间的随机数包括0不包括costTime服务时间再短也不可能是0所 ...

原来如此
回复 使用道具 举报
ew Random().nextInt(costTime)是0到8999,二加1才是1-9000
回复 使用道具 举报
nextInt()包含头不包尾,例如:new Random().nextInt(10) 它产生的随机数是0~9,所以得加1
回复 使用道具 举报
Random().nextInt(costTime)返回一个0~costTime之间的随机数包括0不包括costTime服务时间再短也不可能是0所以后面+1
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马