「java排队买票」java购票
本篇文章给大家谈谈java排队买票,以及java购票对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
java中的队列都有哪些,有什么区别?
阻塞队列、普通队列,非阻塞队列。
阻塞队列与普通队列的而区别在于,当队列是空时,从队列中获取元素的操作会被阻塞,或则当队列是满的时,往队列中增加元素会被阻塞,试图从空的队列中取元素的线程或从满的队列中添加元素的线程同样会被阻塞。
队列的两个基本操作是inserting(插入)一个数据项,即把一个数据项放入队尾,另一个是removing(移除)一个数据项,即移除队头的数据项。这类似于电影爱好者排队买票时先排到队尾,然后到达队头买票后离开队列。
栈中的插入和移除数据项方法的命名是很标准,称为push和pop。队列的方法至今没有标准化的命名。“插入”可以称为put、add或enque,而“删除”可以叫delete、get或deque。插入数据项的队尾,也可以叫作back、tail或end。而移除数据项的队头,也可以叫head。下面将使用insert、remove、front和rear。
插入将值插入队尾,同时队尾箭头增加一,指向新的数据项。
一道java方面的题目
import java.lang.Thread;
class TicketSeller{
static private int fiveNumber=1;//5元钱张数
static private int tenNumber=0;//10元钱张数
static private int twentyNumber=0;//20元钱张数
public int getFiveNumber(){
return TicketSeller.fiveNumber;
}
public int getTenNumber(){
return TicketSeller.tenNumber;
}
public int getTwentyNumber(){
return TicketSeller.twentyNumber;
}
public synchronized void sellTicket(int receiveMoney){
switch(receiveMoney){
case 5:
TicketSeller.fiveNumber++;
break;
case 10:
TicketSeller.tenNumber++;
break;
case 20:
TicketSeller.twentyNumber++;
break;
default:
System.out.println("不能购买!");
}
}
}
class People extends Thread{
private TicketSeller seller=new TicketSeller();
private String name;
private int money;
public People(String name,int money){
this.name=name;
this.money=money;
this.start();
}
public void run(){
seller.sellTicket(money);
System.out.println(name+" 购买 "+money+"元的票,售票员当前:5元---"+seller.getFiveNumber()+"张 10元---"+seller.getTenNumber()+"张 20元---"+seller.getTwentyNumber()+"张");
}
}
class Test{
public static void main(String[] str){
People p1=new People("张三",20);
People p2=new People("李四",10);
People p3=new People("王五",5);
People p4=new People("张三1",20);
People p5=new People("李四2",10);
People p6=new People("王五3",5);
People p7=new People("张三4",20);
People p8=new People("李四5",10);
People p9=new People("王五6",5);
}
}
高分求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排队买票的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java购票、java排队买票的信息别忘了在本站进行查找喔。