`

Java作业第八章

    博客分类:
  • java
阅读更多

演示线程不考虑完全的逻辑问题。例如50=20+20+5+5或50=10+10+20+5等其他情况。。。本例子在判断50找零的时候,只判断了这两种情况,其他的就没考虑的。重在演示线程的过程。。。。

Code:
  1. packagecc.nothing2012.blogServlet;
  2. importjava.util.ArrayList;
  3. importjava.util.List;
  4. /*=======题目:模仿例8-10,设计5个人排队买票,并规定卖票规则和排队顺序==========*/
  5. /*
  6. *模拟五个人排队买票,每人买1张票。售票员有1张20元和1张5元的钱,电影票一张5元。
  7. *排队从头到尾的顺序是:关五十、林二十、余五、李十、杨五
  8. *最后的买票顺序是:余五、李十、林二十、关五十、杨五
  9. */
  10. publicclassch8_4{
  11. publicstaticList<String>theResult=newArrayList<String>();//存放最后买票先后的结果
  12. publicstaticvoidmain(String[]args){
  13. String[]sName={"关五十","林二十","余五","李十","杨五"};
  14. Cinemac=newCinema(sName);
  15. Thread[]theads={newThread(c),newThread(c),newThread(c),
  16. newThread(c),newThread(c)};
  17. //for(inti=0;i<5;i++){//初始化5个进程
  18. //theads[i]=newThread(c);
  19. //}
  20. for(inti=0;i<5;i++){
  21. theads[i].setName(sName[i]);
  22. }
  23. for(inti=0;i<5;i++){
  24. theads[i].start();
  25. }
  26. while(true){//将最后结果进行打印
  27. try{
  28. Thread.sleep(1000);
  29. }catch(InterruptedExceptione){
  30. e.printStackTrace();
  31. }
  32. if(theResult!=null){
  33. if(theResult.size()==5){
  34. printMessage("最后买票先后的结果");
  35. for(inti=0;i<5;i++){
  36. System.out.print(theResult.get(i)+"/t");
  37. }
  38. break;
  39. }
  40. }
  41. }
  42. }
  43. //负责打印信息。
  44. publicstaticvoidprintMessage(Objecto){
  45. System.out.println(o);
  46. }
  47. }
  48. //=======================
  49. classCinemaimplementsRunnable{
  50. TicketSellerseller;
  51. String[]sName;
  52. publicCinema(String[]sName){
  53. seller=newTicketSeller();
  54. this.sName=sName;
  55. }
  56. publicvoidrun(){
  57. if(Thread.currentThread().getName().equals(sName[0])){
  58. seller.sellTicket(50);
  59. }elseif(Thread.currentThread().getName().equals(sName[1])){
  60. seller.sellTicket(20);
  61. }elseif(Thread.currentThread().getName().equals(sName[2])){
  62. seller.sellTicket(5);
  63. }elseif(Thread.currentThread().getName().equals(sName[3])){
  64. seller.sellTicket(10);
  65. }elseif(Thread.currentThread().getName().equals(sName[4])){
  66. seller.sellTicket(5);
  67. }
  68. }
  69. }
  70. //============售票员卖票的操作==============
  71. classTicketSeller{
  72. intfiveNumber=1,tenNumber=0,twentyNumber=1,fiftyNumber=0;//小票员现有5元和20元的钱各一张
  73. publicsynchronizedvoidsellTicket(intreceiveMoney){
  74. StringsName=Thread.currentThread().getName();
  75. if(receiveMoney==5){//票一张是5元,刚好5元就直接卖给他,不用找零了。
  76. fiveNumber+=1;
  77. ch8_4.printMessage(sName+"给小票员5元钱,小票员卖个"+sName+"一张票不用找赎");
  78. ch8_4.theResult.add(sName);
  79. }elseif(receiveMoney==10){
  80. while(fiveNumber<1){
  81. ch8_4.printMessage(sName+"给售票员10元");
  82. ch8_4.printMessage("小票员请"+sName+"靠边等一会");
  83. try{
  84. wait();
  85. }catch(InterruptedExceptione){
  86. e.printStackTrace();
  87. }
  88. ch8_4.printMessage(sName+"结束等待,继续买票");
  89. }
  90. //有零钱了
  91. fiveNumber=fiveNumber-1;
  92. tenNumber+=1;
  93. ch8_4.printMessage(sName+"给售票员10元钱,售票员卖给"+sName+"一张票,找赎5元");
  94. ch8_4.theResult.add(sName);
  95. }elseif(receiveMoney==20){
  96. while(fiveNumber<1||tenNumber<1){
  97. ch8_4.printMessage(sName+"给售票员20元/n售票员请"+sName+"靠边等一会儿");
  98. try{
  99. wait();
  100. }catch(InterruptedExceptione){
  101. e.printStackTrace();
  102. }
  103. ch8_4.printMessage(sName+"结束等待,继续买票");
  104. }
  105. fiveNumber=fiveNumber-1;
  106. tenNumber=tenNumber-1;
  107. twentyNumber+=1;
  108. ch8_4.printMessage(sName+"给售票员20元钱,售票员卖给"+sName+"一张票,找零15元");
  109. ch8_4.theResult.add(sName);
  110. }elseif(receiveMoney==50){
  111. Stringflag="";
  112. //booleanisOK=true;
  113. while(true){
  114. if(fiveNumber>0){//45块的组合有两种情况
  115. if(twentyNumber==2){
  116. flag="2twenty";
  117. break;
  118. //isOK=false;
  119. }elseif(twentyNumber==1&&tenNumber==2){
  120. flag="1twenty";
  121. //isOK=false;
  122. break;
  123. }
  124. }
  125. ch8_4.printMessage(sName+"给售票员50元/n售票员请"+sName+"靠边等一会儿");
  126. try{
  127. wait();
  128. }catch(InterruptedExceptione){
  129. e.printStackTrace();
  130. }
  131. ch8_4.printMessage(sName+"结束等待,继续买票");
  132. }
  133. if(flag.endsWith("2twenty")){
  134. fiveNumber-=1;
  135. twentyNumber=twentyNumber-2;
  136. fiftyNumber+=1;
  137. }elseif(flag.equals("1twenty")){
  138. fiveNumber=fiveNumber-1;
  139. tenNumber=tenNumber-2;
  140. twentyNumber=twentyNumber-1;
  141. }
  142. ch8_4.printMessage(sName+"给售票员50元钱,售票员卖给"+sName+"一张票,找零45元");
  143. ch8_4.theResult.add(sName);
  144. }
  145. notifyAll();
  146. }
  147. }

运行结果如下:

关五十给售票员50元
售票员请关五十靠边等一会儿
林二十给售票员20元
售票员请林二十靠边等一会儿
余五给小票员5元钱,小票员卖个余五一张票不用找赎
关五十结束等待,继续买票
关五十给售票员50元
售票员请关五十靠边等一会儿
林二十结束等待,继续买票
林二十给售票员20元
售票员请林二十靠边等一会儿
李十给售票员10元钱,售票员卖给李十一张票,找赎5元
关五十结束等待,继续买票
关五十给售票员50元
售票员请关五十靠边等一会儿
林二十结束等待,继续买票
林二十给售票员20元钱,售票员卖给林二十一张票,找零15元
关五十结束等待,继续买票
关五十给售票员50元
售票员请关五十靠边等一会儿
杨五给小票员5元钱,小票员卖个杨五一张票不用找赎
关五十结束等待,继续买票
关五十给售票员50元钱,售票员卖给关五十一张票,找零45元
最后最票先后的结果
余五李十林二十杨五关五十

分享到:
评论

相关推荐

    第八章作业

    【标题】:“第八章作业”通常指的是某个学习课程或教程中的第八个章节的作业或练习题目,这在编程教育中很常见,特别是对于系统性的IT课程如北大青鸟的S2课程。北大青鸟是中国知名的计算机职业教育机构,其S2课程...

    JAVA OOP 第一章作业

    在"JAVA OOP 第一章作业"中,我们可以预期学生将接触到一系列基础但重要的面向对象编程概念。 1. 类与对象 类是OOP的基础,它是一个模板或者蓝图,定义了一组属性(数据成员)和行为(方法)。对象是类的实例,它们...

    s2 JavaOOP上机作业全部代码

    在这个“s2 JavaOOP上机作业全部代码”压缩包中,包含了学生在学习Java OOP时可能遇到的各种练习和问题的解决方案。这些代码示例旨在帮助学生深入理解类、对象、继承、封装、多态等核心OOP概念。 首先,让我们详细...

    accp5.0java第4章作业

    总之,"accp5.0java第4章作业"涵盖了Java编程语言的基础和核心概念,旨在帮助学员建立起坚实的基础,为后续更复杂的编程学习打下扎实的基础。在解决作业中的问题时,学员需要不断思考、实践和反思,这将有助于他们...

    Accp5.0 S1java第6章~第8章作业

    在本压缩包文件中,"Accp5.0 S1java第6章~第8章作业"涵盖了Java编程学习的三个重要章节。Accp5.0通常指的是北大青鸟APTECH的ACCP软件工程师培训课程的一个版本,该课程旨在为学员提供全面的Java编程技能。第6章至第8...

    ACCP java 6-8章课后作业题

    第8章可能涉及更高级的主题,例如: 1. **集合框架**:ArrayList、LinkedList、HashSet、HashMap等数据结构的使用。 2. **接口**:接口的定义、实现和用途。 3. **内部类**:匿名类、局部内部类、成员内部类等。 4. ...

    北大青鸟accp5.0java第八章理论加上机作业答案

    【北大青鸟ACCP5.0 Java第八章理论与上机作业答案详解】 在学习Java编程的过程中,理论知识与实践操作同样重要。北大青鸟的ACCP5.0课程是针对初学者设计的一套全面的Java教学体系,旨在帮助学员掌握扎实的编程基础...

    JAVA OOP 第五章作业

    在本节中,我们将深入探讨Java面向对象编程(OOP)的关键概念,这些概念在"JAVA OOP 第五章作业"中可能涉及。面向对象编程是Java编程的核心,它允许我们设计复杂的软件系统,通过模拟现实世界中的实体来解决问题。 ...

    Accp8.0\S2\使用Java实现数据库编程 第二章

    在“Accp8.0\S2\使用Java实现数据库编程 第二章”这一主题中,我们聚焦于如何利用Java语言进行数据库编程。这通常涉及到Java的JDBC(Java Database Connectivity)技术,它是Java平台的标准接口,允许Java应用程序...

    清华大学课程_java程序设计_郑莉_第八章作业

    【标题】"清华大学课程_java程序设计_郑莉_第八章作业"揭示了这是一份来自清华大学的编程课程,专门针对Java程序设计,并由教师郑莉指导。第八章作业表明这是学习过程中一个特定阶段的练习,旨在帮助学生巩固和应用...

    Java第8章 继承和多态含源代码

    Java第8章 继承和多态含源代码 Java第8章 继承和多态含源代码Java第8章 继承和多态含源代码 Java第8章 继承和多态含源代码 Java第8章 继承和多态含源代码 Java第8章 继承和多态含源代码

    使用Java理解程序逻辑第7章.zip

    《使用Java理解程序逻辑》第七章,主要涵盖了Java编程中的一些关键概念和技巧,旨在帮助读者深入理解如何通过Java语言构建有效的程序逻辑。本章内容可能包括但不限于控制流程、循环结构、条件判断、函数(方法)的...

    清华大学课程_java程序设计_郑莉_第四章作业

    【清华大学课程_java程序设计_郑莉_第四章作业】是一门深入探讨Java编程技术的课程,由清华大学知名教师郑莉主讲。这门课程聚焦于Java语言的核心概念和实际应用,旨在帮助学生掌握面向对象编程的基本原理和技巧,...

    13章作业200515221911 (1)_java作业_源码

    【标题】"13章作业200515221911 (1)_java作业_源码" 暗示了这是一个关于Java编程的作业,可能包含第13章的学习内容,并且提供了源代码。这可能是学生在学习《JAVA语言程序设计与数据结构第十一版基础篇》时完成的...

    JAVA OOP 第二章作业

    在Java面向对象编程(OOP)的学习过程中,第二...在完成这个第二章的作业时,你需要编写代码来体现上述概念,同时理解和应用它们解决实际问题。这将帮助你深入理解Java面向对象编程,并为后续章节的学习打下坚实基础。

    ACCP5.0 S1java第二章作业答案

    【ACCP5.0 S1 Java第二章作业答案】是一个针对学习ACCP5.0(Accelerated Certified Computer Professional 5.0)课程第一学期(S1)Java编程的学生的资源集合,主要涵盖了Java语言的基础知识及其应用。这个压缩包...

    Accp8.0\S2\使用Java实现数据库编程 第八章

    在“Accp8.0\S2\使用Java实现数据库编程 第八章”这一主题中,我们聚焦于如何利用Java这门强大的开发语言进行数据库交互。Java数据库编程是后端开发中的核心技能,它使得应用程序能够有效地存储、检索和管理数据。本...

    北大青鸟 accp5.0 java 上机作业

    【北大青鸟ACCP5.0 Java上机作业】是一套专门为学习Java编程语言的学生设计的实践课程。这个课程旨在通过实际操作加深学生对Java语言的理解,提高编程技能。ACCP(Accredited Computer Course Professional)是...

    ACCP5.0 S1Java第一章答案

    【ACCP5.0 S1 Java第一章答案】涵盖了初学者在学习Java编程语言时的基础知识点。ACCP(Advanced Certified Computer Professional)是一个针对计算机专业人士的认证课程,而S1(可能是"Stage 1"的缩写)是这个课程的...

Global site tag (gtag.js) - Google Analytics