怎么一个文件中2个public方法?
地135行

解决方案 »

  1.   

    fullmoon大哥,我compile completed.
    只是不能得到正常结果呀
      

  2.   

    更改了1个方法里的问题,现在乘客p2-4已经乘坐电梯并到了目的地,但p3-1还没上来,我再改public void letIn() { //乘客进电梯
           for(int i=0;i<MAXPERSON-1;++i) {
    if (passWait[curFloor-1][i]!=null){ //所在楼层有乘客在等待时
      if (passWait[curFloor-1][i].directP==directE) {         //而且该乘客期望的运行方向与电梯此时的运行方向一致
         System.out.println(passWait[curFloor-1][i].name+" has come into the elevator,is going to floor "+passWait[curFloor-1][i].toFloor);
       
          numInWait[curFloor-1]--; //该乘客出等待队列
          numInLift++; //电梯内人数加1
          passInLift[numInLift-1]=passWait[curFloor-1][i]; //该乘客进电梯内乘客队列
              passWait[curFloor-1][i]=null; }
            }
            else break;
        }
    }
      

  3.   

    好了,把move()方法改为: public void move() { //调度电梯运行
    boolean moveFlag=false;
    if (curFloor==MAXFLOOR) {
    directE=DOWN; //到顶楼时电梯转向
    }
    if (curFloor==1) {
    directE=UP; //到底楼时电梯转向
    }
    if (directE==UP)
      curFloor++;
    else
      curFloor--;  

         }
      

  4.   

    现贴上全部改后代码,其中 main()方法中加入了调试信息,可以看到调度过程
    (当然我的代码里的move()方法虽然保证了功能,但不够完美,希望其他人继续优化)//模拟电梯运行过程  乘客p3-1:表示此人从3楼到1楼
           public class Elevator {
      final int MAXPERSON=10;         //每层最大乘客数(同时也设定为电梯内所能容纳的最大人数)
      final int MAXFLOOR=5; //最大层数
      final static int UP=1; //上行
      final static int DOWN=0; //下行

      int numInLift=0; //电梯当前所载人数
      static int directE=UP; //电梯当前运行方向
      static int curFloor=1; //电梯当前所在楼层
      static int sumPerson=0; //电梯系统目前总人数(乘客  到达目的楼层后视为离开系统)

      static int[] numInWait; //整型数组:对应元素存放对应楼层的等待人数
      static Passenger[] passInLift; //对象数组:存放电梯当前容纳的乘客对象
      static Passenger[][] passWait; //二维对象数组:一维下标指明楼层数,二维存放相应楼层等待的乘客对象

      public Elevator(){ //构造函数
        curFloor=1;
        numInLift=0;
        directE=UP;
        numInWait=new int[MAXFLOOR];
        passInLift=new Passenger[MAXPERSON];
        passWait=new Passenger[MAXFLOOR][MAXPERSON];
     }


      public void letOut() { //乘客出电梯
        for(int i=0;i<MAXPERSON;i++) {
        if(passInLift[i]!=null){ //如果电梯有人
          if(passInLift[i].toFloor==curFloor) { //而且该乘客的目标楼层恰为电梯目前所在楼层
    numInLift--; //出电梯
    System.out.println(passInLift[i].name+" has left the elevator,come to floor "+curFloor);

             passInLift[i]=null;
             sumPerson--; //出电梯系统
           }
        }
        else break;
        }
    }

        public void letIn() { //乘客进电梯
           for(int i=0;i<MAXPERSON-1;++i) {
    if (passWait[curFloor-1][i]!=null){ //所在楼层有乘客在等待时
      if (passWait[curFloor-1][i].directP==directE) {         //而且该乘客期望的运行方向与电梯此时的运行方向一致
         System.out.println(passWait[curFloor-1][i].name+" has come into the elevator,is going to floor "+passWait[curFloor-1][i].toFloor);
       
          numInWait[curFloor-1]--; //该乘客出等待队列
          numInLift++; //电梯内人数加1
          passInLift[numInLift-1]=passWait[curFloor-1][i]; //该乘客进电梯内乘客队列
              passWait[curFloor-1][i]=null; }
            }
            else break;
        }
    }

        public void move() { //调度电梯运行
    boolean moveFlag=false;
    if (curFloor==MAXFLOOR) {
    directE=DOWN; //到顶楼时电梯转向
    }
    if (curFloor==1) {
    directE=UP; //到底楼时电梯转向
    }
    if (directE==UP)
      curFloor++;
    else
      curFloor--;  

         }

         public static void main(String args[]) {
    Elevator myElevator=new Elevator(); //生成电梯实例
          Passenger p2_4=new Passenger(2,4,UP,"p2_4");
    Passenger p3_1=new Passenger(3,1,DOWN,"p3_1"); //生成乘客实例

             p2_4.addWaitTeam(p2_4);
    p3_1.addWaitTeam(p3_1); //将乘客实例加入等待队列

    while(myElevator.sumPerson!=0 ) { //当系统人数不为0时
        try{Thread.sleep(1000);}   //调试代码,可去掉
        catch(Exception e) {}    //调试代码,可去掉
        System.out.println("Current floor :"+ curFloor); //调试代码,可去掉
        System.out.println("Current person:"+ sumPerson);   //调试代码,可去掉
    myElevator.letOut(); myElevator.letIn(); //先进后出
    myElevator.move();
    //然后移动
    }
    }
    }
    class Passenger {
        final static int UP=1; //乘客上楼
        final static int DOWN=0; //乘客下楼    int directP=UP; //乘客上下状态
        int fromFloor=0; //乘客的原楼层
        int toFloor=0; //乘客的目的楼层
        String name=new String(); //乘客标识
       public Passenger(int from,int to,int direct,String name){
    fromFloor=from;
    toFloor=to;
    directP=direct;
    this.name=name;
      }

      public void addWaitTeam(Passenger obj) { //乘客加入相应楼层的等待队列
          Elevator.passWait[obj.fromFloor-1][Elevator.numInWait[obj.fromFloor-1]]=obj;
          System.out.println(obj.name+" is waiting at floor "+obj.fromFloor); Elevator.numInWait[obj.fromFloor-1]++;
    Elevator.sumPerson++; //系统总人数加1
       }
    }
      

  5.   

    对不起,还有1处错误要改,在letOut()和letIn()方法中要把 else break;
     改为 else continue;否则同层楼上有2个以上人上电梯,但在不同楼层下电梯时就会出问题
    现在程序如下,并且又加入了一位从2楼要上5楼的乘客//模拟电梯运行过程  乘客p3-1:表示此人从3楼到1楼
              public class Elevator {
      final int MAXPERSON=10;         //每层最大乘客数(同时也设定为电梯内所能容纳的最大人数)
      final int MAXFLOOR=5; //最大层数
      final static int UP=1; //上行
      final static int DOWN=0; //下行

      int numInLift=0; //电梯当前所载人数
      static int directE=UP; //电梯当前运行方向
      static int curFloor=1; //电梯当前所在楼层
      static int sumPerson=0; //电梯系统目前总人数(乘客  到达目的楼层后视为离开系统)

      static int[] numInWait; //整型数组:对应元素存放对应楼层的等待人数
      static Passenger[] passInLift; //对象数组:存放电梯当前容纳的乘客对象
      static Passenger[][] passWait; //二维对象数组:一维下标指明楼层数,二维存放相应楼层等待的乘客对象

      public Elevator(){ //构造函数
        curFloor=1;
        numInLift=0;
        directE=UP;
        numInWait=new int[MAXFLOOR];
        passInLift=new Passenger[MAXPERSON];
        passWait=new Passenger[MAXFLOOR][MAXPERSON];
     }


      public void letOut() { //乘客出电梯
        for(int i=0;i<MAXPERSON;i++) {
        if(passInLift[i]!=null){ //如果电梯有人
          if(passInLift[i].toFloor==curFloor) { //而且该乘客的目标楼层恰为电梯目前所在楼层
    numInLift--; //出电梯
    System.out.println(passInLift[i].name+" has left the elevator,come to floor "+curFloor);

             passInLift[i]=null;
             sumPerson--; //出电梯系统
           }
        }
        else continue;//changed
        }
    }

        public void letIn() { //乘客进电梯
           for(int i=0;i<MAXPERSON-1;++i) {
    if (passWait[curFloor-1][i]!=null){ //所在楼层有乘客在等待时
      if (passWait[curFloor-1][i].directP==directE) {         //而且该乘客期望的运行方向与电梯此时的运行方向一致
         System.out.println(passWait[curFloor-1][i].name+" has come into the elevator,is going to floor "+passWait[curFloor-1][i].toFloor);
       
          numInWait[curFloor-1]--; //该乘客出等待队列
          numInLift++; //电梯内人数加1
          passInLift[numInLift-1]=passWait[curFloor-1][i]; //该乘客进电梯内乘客队列
              passWait[curFloor-1][i]=null; }
            }
            else continue;//changed
        }
    }

        public void move() { //调度电梯运行
    boolean moveFlag=false;
    if (curFloor==MAXFLOOR) {
    directE=DOWN; //到顶楼时电梯转向
    }
    if (curFloor==1) {
    directE=UP; //到底楼时电梯转向
    }
    if (directE==UP)
      curFloor++;
    else
      curFloor--;  

         }

         public static void main(String args[]) {
    Elevator myElevator=new Elevator(); //生成电梯实例
         Passenger p3_1=new Passenger(3,1,DOWN,"p3_1"); //生成乘客实例
    Passenger p2_4=new Passenger(2,4,UP,"p2_4");
            Passenger p2_5=new Passenger(2,5,UP,"p2_5");
            p2_4.addWaitTeam(p2_4);
            p3_1.addWaitTeam(p3_1); //将乘客实例加入等待队列
    p2_5.addWaitTeam(p2_5);
    while(myElevator.sumPerson!=0 ) { //当系统人数不为0时
        try{Thread.sleep(1000);}   //调试代码,可去掉
        catch(Exception e) {}    //调试代码,可去掉
        System.out.println("Current floor :"+ curFloor); //调试代码,可去掉
        System.out.println("Current person:"+ sumPerson);   //调试代码,可去掉
    myElevator.letOut(); myElevator.letIn(); //先出后进
    myElevator.move();
    //然后移动
    }
    }
    }
    class Passenger {
        final static int UP=1; //乘客上楼
        final static int DOWN=0; //乘客下楼    int directP=UP; //乘客上下状态
        int fromFloor=0; //乘客的原楼层
        int toFloor=0; //乘客的目的楼层
        String name=new String(); //乘客标识
       public Passenger(int from,int to,int direct,String name){
    fromFloor=from;
    toFloor=to;
    directP=direct;
    this.name=name;
      }

      public void addWaitTeam(Passenger obj) { //乘客加入相应楼层的等待队列
          Elevator.passWait[obj.fromFloor-1][Elevator.numInWait[obj.fromFloor-1]]=obj;
          System.out.println(obj.name+" is waiting at floor "+obj.fromFloor); Elevator.numInWait[obj.fromFloor-1]++;
    Elevator.sumPerson++; //系统总人数加1
       }
    }
      

  6.   

    套用献血公益广告中的台词
    kinzey34朋友:我不认识你,但我谢谢你!
    -------------------------------
    我qq:87708747初学java ,还望今后不吝赐教阿!!