2、顾客进服装店的购物过程包含三个环节,选衣服,试衣服,结账离开。其中选衣服环节和试衣服环节需要的时间为 1-5秒不等(随机),结账离开环节5秒,该店只有一间试衣间(不能两人同时使用)。 请编写一个程序模拟每隔一段时间有一个个顾客进店购买的过程。程序执行过程中,输出每个顾客所处的环节信息。 比如,顾客1在试衣服,顾客2,在选衣服,顾客2在试衣服。 提示,用线程调度
学校的作业罢了
模仿前辈的
模仿模仿着,然后我也不知道怎么搞的,搞出另外一个版本的,跟题目不太一样,凑合着算了,神奇的竟然能运行了
先做一个随机数
package theme7_2;
import java.util.Random;
public class RandomUtil {//这个名字不能起为Random,不然会冲突报错,我刚刚就是
private static Random r = new Random();
/**
* 生成一个处于[low, high]的整数
*/
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(Queue<Customer> queue)//排队格式,<>里面是排队的人
{
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 Queue<Customer> queue = 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();
}
}
}
}
反正我觉的很离谱,跟前辈的测试环节不太一样,我选择自己来模拟老师给的例子
结果就成这个鬼样子了,顾客一个一个排队来,一个结束再到另外一个
笑死我了