A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kira 中级黑马   /  2014-3-8 18:32  /  976 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这个程序做了两小时还是没成啊 :'( 需求就是一个多线程售票的程序

  1. public class Station {

  2.         /**
  3.          * @param args
  4.          */

  5.        
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.          new Thread(new SealWindow("一号")).start();
  9.          new Thread(new SealWindow("二号")).start();
  10.          new Thread(new SealWindow("三号")).start();
  11.         }

  12. }
  13. //售票中心
  14. class TicketSealCenter{
  15.         private Ticket t;//给票
  16.        
  17.         TicketSealCenter(Ticket t){
  18.                 this.t=t;
  19.                
  20.         }
  21.         public synchronized void sellTicket(SealWindow sw){//这里为了安全 用到了关键词synchronized
  22.         if(t.isEmpty()){
  23.                
  24.         Integer i  =        t.getNumber();//得到票数
  25.         i--;//自减票
  26.         String name = sw.getWindowName();
  27.         System.out.println("第" + name+ "售票窗口卖出了第" + i+ "张票");
  28.         }
  29.         else{
  30.                
  31.                 System.out.println("票已售完");
  32.         }
  33.                
  34.         }
  35.        
  36.        
  37. }
  38. //票类
  39. class Ticket{
  40.         private int ticketNumber=200; //定义票的数量
  41.    
  42.         public int getNumber() {
  43.                 return ticketNumber;
  44.         }

  45.         public void setNumber(int number) {//找到javaBean
  46.                 this.ticketNumber = number;
  47.         }
  48.         public boolean isEmpty(){//判断是否卖完
  49.                  if(ticketNumber>0)
  50.                             return true;
  51.                  else
  52.                          return false;
  53.                
  54.         }
  55.        
  56. }


  57. //窗口类
  58. class SealWindow implements Runnable{
  59.   
  60.         private String windowName ;
  61.      private TicketSealCenter center;
  62.      
  63.        
  64.         public void setWindowName(String windowName) {
  65.                 this.windowName = windowName;
  66.         }
  67.            public String getWindowName() {
  68.                         return windowName;
  69.                 }
  70.         SealWindow(String windowName){
  71.                
  72.                 this.windowName=windowName;
  73.         }
  74.         @Override
  75.         public void run() {
  76.                 // TODO Auto-generated method stub
  77.                 while(true){
  78.                 center.sellTicket(this);//卖票
  79.                         try {
  80.                                 Thread.sleep(1000);//卖一次停1秒
  81.                         } catch (InterruptedException e) {
  82.                                 // TODO Auto-generated catch block
  83.                                 e.printStackTrace();
  84.                         }
  85.                 }
  86.                
  87.                
  88.         }

  89.        
  90.        
  91.        
  92. }
复制代码
结果写完了 调试了半天还是没成 说是报空指针
  1. center.sellTicket(this);//卖票
复制代码

这个地方 结果我把int 改成了Integer 心想 就不报错了吧 没想到还这样 没办法了

大神帮忙给看看:'( 求指点

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

4 个回复

倒序浏览
应该是没票类对象
回复 使用道具 举报
hhmm665544 发表于 2014-3-8 22:03
应该是没票类对象

有啊:'(~~~
回复 使用道具 举报
你第84行的  center.sellTicket(this); 的center还没引用对象呢,拿调用sellTicket()方法??



评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
一年_Hei 发表于 2014-3-9 14:13
你第84行的  center.sellTicket(this); 的center还没引用对象呢,拿调用sellTicket()方法??

那我该怎么改啊 真心求助:'(
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马