SCNU

SCNU,第1张

SCNU

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(Queue 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 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();
			}
		}
	}
	

}

反正我觉的很离谱,跟前辈的测试环节不太一样,我选择自己来模拟老师给的例子
结果就成这个鬼样子了,顾客一个一个排队来,一个结束再到另外一个
笑死我了

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4874379.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-11
下一篇 2022-11-11

发表评论

登录后才能评论

评论列表(0条)

保存