2、顾客进服装店的购物过程包含三个环节,选衣服,试衣服,结账离开。其中选衣服环节和试衣服环节需要的时间为 1-5秒不等(随机),结账离开环节5秒,该店只有一间试衣间(不能两人同时使用)。 请编写一个程序模拟每隔一段时间有一个个顾客进店购买的过程。程序执行过程中,输出每个顾客所处的环节信息。 比如,顾客1在试衣服,顾客2,在选衣服,顾客2在试衣服。 提示,用线程调度
学校的作业罢了
模仿前辈的
模仿模仿着,然后我也不知道怎么搞的,搞出另外一个版本的,跟题目不太一样,凑合着算了,神奇的竟然能运行了
先做一个随机数
package theme7_2; import java.util.Random; public class RandomUtil {//这个名字不能起为Random,不然会冲突报错,我刚刚就是 private static Random r = new Random(); public static int getInt(int low, int high) // 10, 20 { // high - low 10 0-9 10,19 return low + r.nextInt(high - low + 1); } }
做一个顾客
package theme7_2; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Queue; public class Customer { private String num;//顾客编号 private SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");//格式化时间 public Customer(String num) { this.num = num;//Customer的类都要有这么一个返回私有成员的东西 } //顾客排队 public void queueUp(Queuequeue)//排队格式,<>里面是排队的人 { System.out.println(num + "开始排队 " + getTime()); queue.offer(this);//输出顾客编号??? } //顾客挑选衣服 public void select() { System.out.println(num+"开始挑选衣服"+getTime()); int cost = RandomUtil.getInt(1, 2)*1000;//选衣服花费时间1,2s; try { Thread.sleep(cost); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(num + "挑好衣服 " + getTime()); } //顾客试穿衣服 public void trying() { System.out.println(num+"开始试衣服"+getTime()); int cost = RandomUtil.getInt(3, 4)*1000;//试穿衣服3,4s; try { Thread.sleep(cost); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(num+"试完衣服"+getTime()); } public String getNum() { return num; } public void setNum(String num) { this.num = num; } public SimpleDateFormat getSdf() { return sdf; } public void setSdf(SimpleDateFormat sdf) { this.sdf = sdf; } public String getTime() { return sdf.format(new Date());//统一格式日期 } }
做个顾客测试
package theme7_2; import java.util.linkedList; import java.util.Queue; public class Test { public static void main(String[] args) { MyThread1 t1 = new MyThread1(); t1.start(); } } class MyThread1 extends Thread{ public static int count = 0; public static Queuequeue = new linkedList<>();//新建一个顾客的队列 public static void showQueue() { for(Customer cust : queue) { System.out.print(cust.getNum()+" ");//得到顾客编号 } System.out.println("n"); } public void run() { while(true) { Customer cust = new Customer("顾客"+(++count)); cust.select();//挑衣服 cust.queueUp(queue); cust.trying(); queue.poll(); if (cust != null) { cust.trying(); showQueue(); // 每次一个顾客从试衣间出来(下一个顾客还没进去),就打印一下队伍的情况 } try { Thread.sleep(RandomUtil.getInt(1, 2)*1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
反正我觉的很离谱,跟前辈的测试环节不太一样,我选择自己来模拟老师给的例子
结果就成这个鬼样子了,顾客一个一个排队来,一个结束再到另外一个
笑死我了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)