这是我的卖包子,献丑了,希望各位指正;
在循环中加循环是为了保证在最后所剩包子数小于顾客所需数时,让该顾客在该窗口重新买少于或等于所剩包子数量的包子,也就是说该顾客在该窗口说买5个,剩余包子没那么多,我得告诉他没那么多,让他少买点,而不是说剩余不足5个我就不在该窗口卖给给顾客了;
增加第二个随机数是保证顾客说的第二个数一定可以买到也就是顾客第一次说要买5个,销售员说没有5个只有3个,顾客必须买少于3个,因为顾客再说买4个或者5个的话会被认为是找茬的,可能要引起口角,不好.
package com.java;
public class 测试 {
public static void main(String[] args) {
//创建5条线程代表5个窗口
Thread t1 = new BaoZi();
Thread t2 = new BaoZi();
Thread t3 = new BaoZi();
Thread t4 = new BaoZi();
Thread t5 = new BaoZi();
//命名
t1.setName("1号窗口");
t2.setName("2号窗口");
t3.setName("3号窗口");
t4.setName("4号窗口");
t5.setName("5号窗口");
//开启线程,开卖
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
}
class BaoZi extends Thread {
//100个包子
private static int baoZi = 100;
@Override
public void run() {
//此处循环是为了卖完包子
while (true) {
synchronized (BaoZi.class) {
//卖完为止
if (baoZi<= 0) {
break;
}
//此处循环是为了保证最后包子数少于顾客要购买的量(随机数),该顾客在该窗口重新随机数再买
while (true) {
//当前窗口当前顾客要购买的包子数
int i = (int) (Math.random() * 5) + 1;
//所剩包子小于顾客想要购买的数量时(告诉该顾客包子数不够,你要买等于或者少于剩余数的包子)
if (i > baoZi) {
//让该顾客在该窗口重新买,而且保证重新买的数量在包子剩余数范围内(第二次随机必须买到)
int t = (int) (Math.random() * baoZi) + 1;
//卖出包子
baoZi -= t;
//判断卖出包子是否有剩余,无剩余则提示卖完并结束本次销售
if (baoZi == 0) {
System.out.println(this.getName() + "本次卖出" + t
+ "个包子,一共卖了" + (100 - baoZi) + "个包子,卖完了");
break;
//如果卖了之后还有剩余则打印本次销售的信息以及剩余的包子数,并结束本次销售
} else {
System.out.println(this.getName() + "本次卖出" + t
+ "个包子,一共卖了" + (100 - baoZi) + "个包子,还剩"
+ baoZi + "个包子");
break;
}
//当包子剩余数大于顾客所需购买量时,直接销售不需要顾客再重新随机数
} else {
//卖出包子,并判断是否卖完,打印当次的销售情况和剩余包子数
baoZi -= i;
if (baoZi == 0) {
System.out.println(this.getName() + "本次卖出" + i
+ "个包子,一共卖了" + (100 - baoZi) + "个包子,卖完了");
break;
} else {
System.out.println(this.getName() + "本次卖出" + i
+ "个包子,一共卖了" + (100 - baoZi) + "个包子,还剩"
+ baoZi + "个包子");
break;
}
}
}
}
}
}
}
|