「模拟排队java」模拟排队数据结构

博主:adminadmin 2023-01-17 00:54:09 401

本篇文章给大家谈谈模拟排队java,以及模拟排队数据结构对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

用C或java编写排队服务程序

这个简单。

先做几个实体

客户,售货员,

客户包括到达时间,完成目标需要的时间,开始操作的时间,结束的时间。

售货员包括当前正在服务的客户,

开2个线程。一个是客户产生线程。

一个是售货员消费线程

中间用个公共寄存体queue。

客户产生线程每次产生一个带到达时间,完成目标时间的客户。

放倒队列里,并提醒售货员线程接收。

售货员线程空置则从队列里拿一个客户,当前时间=当前时间和客户到达的时间最大的一个。客户的开始操作时间=当前时间

结束时间=当前时间+需要时间。

处理完以后当前时间=结束时间。

如果队列空,售货员线程等待。

不为空就继续取。

注意所有处理过的客户都需要放到一个List里。

然后这一天结束了,就把整个List里的客户全部取出来,就算平均等待时间,各种时间。。。。这个会统计的吧。

要求追分

高分求JAVA高手帮忙

public class Buy{

Object seller=new Object();

int twantyNumber=0;

int tenNumber=0;

int fiveNumber=1;

int all=5;

public Buy(){

printmony();

buyer zhao=new buyer("赵",2,20);

buyer qian=new buyer("钱",1,20);

buyer sun=new buyer("孙",1,10);

buyer li=new buyer("李",2,10);

buyer zhou=new buyer("周",1,5);

zhao.start();

qian.start();

sun.start();

li.start();

zhou.start();

}

class buyer extends Thread{

int number=0;

int mony=0;

String name=null;

boolean hasBuyed=false;

public buyer(String name,int number,int mony) {

this.number=number;

this.mony=mony;

this. name=name;

}

void print(int i){

if(i==0){System.out.println(name+" 正在买 "+number+" 张票 "+ mony+ "元钱");

}

if(i==1){System.out.println(name+" 已经买完 !");

printmony();

}

}

public void run(){

while(!hasBuyed){

synchronized (seller) {

int charge=mony-number*5;

if((tenNumber=charge/10fiveNumber=(charge%10)/5)||charge==0){

print(0);

if(mony==20)twantyNumber++;

if(mony==10)tenNumber++;

if(mony==5)fiveNumber++;

tenNumber-=charge/10;

fiveNumber-=(charge%10)/5;

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

print(1);

hasBuyed=true;

seller.notifyAll();

}else{

try {

seller.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

}

}

void printmony(){

System.out.println("\t 售票员的钱数:");

System.out.println("\t\t\t20元\t10元\t五元");

System.out.println("\t\t\t"+twantyNumber+"张\t"+tenNumber+"张\t"+fiveNumber+"张");

}

public static void main(String[] s){

new Buy();

}

}

结果:

售票员的钱数:

20元 10元 五元

0张 0张 1张

孙 正在买 1 张票 10元钱

孙 已经买完 !

售票员的钱数:

20元 10元 五元

0张 1张 0张

赵 正在买 2 张票 20元钱

赵 已经买完 !

售票员的钱数:

20元 10元 五元

1张 0张 0张

周 正在买 1 张票 5元钱

周 已经买完 !

售票员的钱数:

20元 10元 五元

1张 0张 1张

李 正在买 2 张票 10元钱

李 已经买完 !

售票员的钱数:

20元 10元 五元

1张 1张 1张

钱 正在买 1 张票 20元钱

钱 已经买完 !

售票员的钱数:

20元 10元 五元

2张 0张 0张

java高手帮帮忙!!急!

---------------------TicketBuyer.java---------------------------

public class TicketBuyer extends Thread {

private int money;

private TicketSeller ticketSeller;

public TicketBuyer(){

}

//构造函数,设置手中钱币值及向哪个售票员买票

public TicketBuyer(int money,TicketSeller ticketSeller){

this.money = money;

this.ticketSeller = ticketSeller;

}

public void run(){

ticketSeller.sellTicket(money);//每个人都买票

}

public static void main(String[] args) {

// TODO 自动生成方法存根

TicketSeller ticketSeller = new TicketSeller();

TicketBuyer Zhang = new TicketBuyer(20,ticketSeller);

TicketBuyer Sun = new TicketBuyer(10,ticketSeller);

TicketBuyer Zhao = new TicketBuyer(5,ticketSeller);

//注以下要设置优先级别是因为他们本来就是排好队的, 先来先买到票

//这样才能保证每次运行先买到票的是拿10元的孙某而不是赵某

Zhang.setPriority(6);

Sun.setPriority(5);

Zhao.setPriority(4);

Zhang.start();

Sun.start();

Zhao.start();

}

}

------------TicketSeller.java-------------------------

public class TicketSeller {

private int fiveNumber = 1;//开始时只有一张5元的钱.

private int tenNumber = 0;

private int twentyNumber = 0;

public synchronized void sellTicket(int receiveMoney) {

if(!isAbleToSell(receiveMoney)){//测下能不能够售票.

try{

wait();//如果不能卖给当前人,那人就得等一会.

}catch(InterruptedException e){

}

}

//只有能够售票的人(线程)才会执行下面的代码.

switch(receiveMoney){//有几种情况

case 5 :fiveNumber ++;break; //不用找零钱

case 10 :tenNumber ++ ;fiveNumber--;break;//要找5元零钱

case 20 :if (tenNumber 0 ){//如果有10元面币的就找10元和5元的

tenNumber --;

fiveNumber --;

twentyNumber ++;

}else{//要没有10元的,那就找回3张5元的

fiveNumber -=3;

twentyNumber ++;

}

break;

}

System.out.printf("当收到钱为:%d元时,售票成功!\n",receiveMoney);//输出信息

notify();//可以叫等着的那个人买票了.

}

//有几种情况看能不能售票,这里你应该能看明白就不多说了.

public boolean isAbleToSell(int money){

if(money == 5 ){

return true;

}else if(money == 10 fiveNumber 0 ){

return true;

}else if(money == 20 tenNumber 0 fiveNumber 0){

return true;

}else if(money == 20 fiveNumber = 3){

return true;

}

return false;

}

}

-------- 运行结果: ---------------------

当收到钱为:10元时,售票成功!

当收到钱为:5元时,售票成功!

当收到钱为:20元时,售票成功!

用java实现银行排队程序,要求模拟银行的业务排队系统,要有界面,实现完成的排队和叫号

import java.awt.Color;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.ButtonGroup;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

public class BankWaiting extends JFrame implements ActionListener {

int total = 0, now = 0;

boolean is1Ready = false, is2Ready = false, is3Ready = false;

int call1, call2, call3;

JFrame jf;

JLabel jr, jl, jl1, j2, jl2, j3, jl3;

JTextField jr4;

JButton jb, jb1, jb2, j1;

JButton workBut1, workBut2, workBut3;

JPanel jp, jp1, jp2;

public BankWaiting() {

setLayout(null);

jf = new JFrame("银行叫号程序");// 窗体

jr = new JLabel("请**号到*号窗口办理业务");

jr.setBounds(300, 10, 800, 50);

jr.setForeground(Color.red);

j1 = new JButton("取号");

j1.addActionListener(this);

jr4 = new JTextField("欢迎");

jr4.setEditable(false);

ButtonGroup bg = new ButtonGroup();

bg.add(j1);

jp = new JPanel();

jl = new JLabel("一号窗口");

jl1 = new JLabel("一号窗口,欢迎你!");

jb = new JButton("下一位");

workBut1 = new JButton("开始办理");

workBut1.addActionListener(this);

jb.addActionListener(this);

jp.setBackground(Color.pink);

jp.setSize(200, 80);// 大小

jp.setLocation(20, 120); // 位置

jf.setLayout(null);

jp1 = new JPanel();

j2 = new JLabel("二号窗口");

jl2 = new JLabel("二号窗口,欢迎你!");

jb1 = new JButton("下一位");

workBut2 = new JButton("开始办理");

jb1.addActionListener(this);

workBut2.addActionListener(this);

jp1.setBackground(Color.pink);

jp1.setSize(200, 80);// 大小

jp1.setLocation(250, 120); // 位置

jf.setLayout(null);

jp2 = new JPanel();

j3 = new JLabel("三号窗口");

jl3 = new JLabel("三号窗口,欢迎你!");

jb2 = new JButton("下一位");

workBut3 = new JButton("开始办理");

workBut3.addActionListener(this);

jb2.addActionListener(this);

jp2.setBackground(Color.pink);

jp2.setSize(200, 80);// 大小

jp2.setLocation(500, 120); // 位置

jf.setLayout(null);

jf.add(jp);

jf.add(jp1);

jf.add(jp2);

jf.add(jr);

jp.add(jl);

jp.add(jl1);

jp.add(jb);

jp.add(workBut1);

jp1.add(j2);

jp1.add(jl2);

jp1.add(jb1);

jp1.add(workBut2);

jp2.add(j3);

jp2.add(jl3);

jp2.add(jb2);

jp2.add(workBut3);

jf.add(j1);

jf.add(jr4);

j1.setBounds(550, 300, 60, 30);

jr4.setBounds(300, 300, 200, 40);

jf.setSize(800, 600);

jf.setVisible(true);

jf.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

}

public void actionPerformed(ActionEvent e) {

String s = "";

if (e.getSource() == j1) {

s = "第" + (++total) + "号,前面还有" + (total - now - 1) + "位顾客!";

jr4.setText(s);

}

if (e.getSource() == jb) {

if (this.hasCustomers()) {

s = "请" + (++now) + "号顾客到一号窗口办理";

call1 = now;

jl1.setText(s);

jr.setText(s);

is1Ready = true;

} else {

s = "当前已经没有顾客了";

jl1.setText(s);

is1Ready = false;

}

} else if (e.getSource() == jb1) {

if (this.hasCustomers()) {

s = "请" + (++now) + "号顾客到二号窗口办理";

call2 = now;

jl2.setText(s);

jr.setText(s);

is2Ready = true;

} else {

s = "当前已经没有顾客了";

jl2.setText(s);

is2Ready = false;

}

} else if (e.getSource() == jb2) {

if (this.hasCustomers()) {

s = "请" + (++now) + "号顾客到三号窗口办理";

call3 = now;

jl3.setText(s);

jr.setText(s);

is3Ready = true;

} else {

s = "当前已经没有顾客了";

jl3.setText(s);

is3Ready = false;

}

}

if (e.getSource() == workBut1) {

if (is1Ready) {

s = call1 + "号顾客正在办理业务。。。";

jl1.setText(s);

is1Ready = false;

}

} else if (e.getSource() == workBut2) {

if (is2Ready) {

s = call2 + "号顾客正在办理业务。。。";

jl2.setText(s);

is2Ready = false;

}

} else if (e.getSource() == workBut3) {

if (is3Ready) {

s = call3 + "号顾客正在办理业务。。。";

jl3.setText(s);

is3Ready = false;

}

}

}

public boolean hasCustomers() {

if (now total) {

return true;

} else {

return false;

}

}

public static void main(String[] args) {

new BankWaiting();

}

}

模拟排队java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于模拟排队数据结构、模拟排队java的信息别忘了在本站进行查找喔。