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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 武嘉豪 于 2013-9-6 21:15 编辑
  1. import java.util.Timer;
  2. class road extends java.util.TimerTask
  3. {
  4.         private String name;
  5.         private int cum=0;//cum记录的道路上现有的车的数量
  6.         private int com=0;//com记录的这条道路上过去了多少车
  7.         private lamp lampp;
  8.         road(String name,lamp lampp)//通过构造函数来标记路线,确定灯的控制权
  9.         {
  10.                 this.name=name;
  11.                 this.lampp=lampp;
  12.         }
  13.         void cadd()
  14.         {
  15.                 int temp=(int)(Math.random()*2);
  16.                 this.cum+=temp;//这条路上随机生成1-10的车辆
  17.                 if(temp>0)
  18.                 {
  19.                 System.out.println(name+"的路上新增了"+temp+"量车");
  20.                 }
  21.         }
  22.         void cpas()
  23.         {
  24.                 if(this.lampp.getcolor()==2)
  25.                 {
  26.                         if (cum>0)
  27.                         {
  28.                                 this.cum--;
  29.                                 this.com++;
  30.                                 System.out.println(name+"的路上通过了1量车");
  31.                         }
  32.                 }
  33.         }
  34.         public void run()
  35.         {
  36.                 int i=0;
  37.                 if(i%5==0)
  38.                 {
  39.                         this.cadd();
  40.                 }
  41.                 this.cpas();
  42.         }
  43.         void start()
  44.         {
  45.                 Timer timer = new Timer();
  46.         timer.schedule(this,1000,10000);
  47.         }
  48. }

  49. class lamp
  50. {
  51.     private String name;
  52.         private int color=1;//color记录颜色,1为红色,2为绿色
  53.         lamp(String name)//通过构造函数来标记路灯
  54.         {
  55.                 this.name=name;
  56.         }
  57.     lamp(){}
  58.         void green()
  59.     {
  60.             this.color=2;
  61.             System.out.println(name+"的绿灯亮了");
  62.     }
  63.     void red()
  64.     {
  65.             this.color=1;
  66.             System.out.println(name+"的红灯亮了");
  67.     }
  68.     int getcolor()
  69.     {
  70.             return this.color;
  71.     }
  72.     void setcollor(int color)
  73.     {
  74.             this.color=color;
  75.     }
  76. }
  77. class lampctrl extends java.util.TimerTask
  78. {
  79.         public lamp[] lamps=new lamp[8];
  80.         lampctrl(lamp...lamps)
  81.         {
  82.                 for(lamp la:lamps)
  83.                 {
  84.                         int i=0;
  85.                         this.lamps[i]=la;
  86.                         i++;
  87.                 }
  88.         }
  89.         void changelamp()
  90.         {
  91.                 Timer timer = new Timer();
  92.         timer.schedule(this,1000,10000);
  93.         }
  94.         public void run()
  95.         {
  96.                 int i=1;//红绿灯一共有亮的情况和顺序 1:N2S和S2N亮.2:S2W和N2E.3:W2E,E2W.4:W2N,E2S
  97.                 switch(i)
  98.                 {
  99.                         case 1:
  100.                         if(lamps[7].getcolor()==2)
  101.                         {
  102.                                 lamps[7].red();
  103.                                 lamps[8].red();
  104.                         }
  105.                         lamps[1].green();
  106.                         lamps[2].green();
  107.                         break;
  108.                         case 2:
  109.                         lamps[1].red();
  110.                         lamps[2].red();
  111.                         lamps[3].green();
  112.                         lamps[4].green();
  113.                         break;
  114.                         case 3:
  115.                         lamps[3].red();
  116.                         lamps[4].red();
  117.                         lamps[5].green();
  118.                         lamps[6].green();
  119.                         break;
  120.                         case 4:
  121.                         lamps[5].red();
  122.                         lamps[6].red();
  123.                         lamps[7].green();
  124.                         lamps[8].green();
  125.                         break;
  126.                 }
  127.                 i++;
  128.                 if (i>4){i=1;}
  129.         }
  130. }
  131. class roadctrl
  132. {
  133.         public static void main(String[] args)
  134.         {//红绿灯一共有亮的情况和顺序 1:N2S和S2N亮.2:S2W和N2E.3:W2E,E2W.4:W2N,E2S
  135.                 lamp l1=new lamp("N2S");lamp l2=new lamp("S2N");lamp l3=new lamp("S2W");lamp l4=new lamp("N2E");
  136.                 lamp l5=new lamp("W2E");lamp l6=new lamp("E2W");lamp l7=new lamp("W2N");lamp l8=new lamp("E2S");
  137.                 lampctrl lc=new lampctrl(l1,l2,l3,l4,l5,l6,l7,l8);
  138.                 lamp ll=new lamp();                ll.setcollor(2);
  139.                 road r1=new road("N2S",l1); road r2=new road("S2N",l2); road r3=new road("S2W",l3); road r4=new road("N2E",l4);
  140.                 road r5=new road("N2S",l5); road r6=new road("N2S",l6); road r7=new road("N2S",l7); road r8=new road("N2S",l8);
  141.                 road r9=new road("S2E",ll); road r10=new road("E2N",ll); road r11=new road("N2W",ll); road r12=new road("W2S",ll);
  142.                 lc.changelamp();
  143.                 r1.start();r2.start();r3.start();r4.start();r5.start();r6.start();r7.start();r8.start();r9.start();r10.start();
  144.                 r11.start();r12.start();
  145.         }
  146. }
复制代码
没用多线程,纯Timer控制的,可能错误有点多,请大家都指出来。

这是报错
Exception in thread "Timer-0"
java.lang.NullPointerException
        at lampctrl.run(roadctrl.java:101)
        at java.util.TimerThread.mainLoop(Unknown Source)
        at java.util.TimerThread.run(Unknown Source)

评分

参与人数 1技术分 +1 收起 理由
张俊生 + 1 神马都是浮云

查看全部评分

2 个回复

正序浏览
终于找到错误了。
所有记数的变量都应该定义成static类型。
蛋疼了。
回复 使用道具 举报
找到了一处
  1.                 for(lamp la:lamps)
  2.                 {
  3.                         int i=0;
  4.                         this.lamps[i]=la;
  5.                         i++;
  6.                 }
复制代码
这里只是把对象给了lamps[0-7]所以run方法里面的ramps[8]会报空指针

但是修改了这处之后还是会报空指针
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马