2013-03-24 62 views
1

我在Java中完成基本的电梯模拟器时遇到了问题。到目前为止,我的选择是让用户输入是否要选择楼层,拉火警或退出模拟。当他们选择选择楼层时,他们可以从1到100之间选择任何楼层,除了13楼。我无法弄清楚如何做的是让仿真跟踪他们当前的楼层,以便他们可以停下来。这是我到目前为止:Java中的电梯模拟器帮助

public class Elevator { 

    public Elevator() {} 

    public void selectFloor() { 
     Scanner scnr = new Scanner(System.in); 
     int newFloor; 

     System.out.println("Enter the floor you'd like to go to ==> "); 
     newFloor = scnr.nextInt(); 
     if (newFloor > 100 || newFloor < 0 || newFloor == 13) { 
      System.out.println("Invalid selection"); 
     } 

     else if (newFloor <= 100 && newFloor > 0 && newFloor != 13) { 
      for (int i = 1; i <= newFloor; i++) 
       System.out.println("..." + i); 
       System.out.println("Ding!"); 
     } 
    } 

    public void fireAlarm() { 
     System.out.println("Danger, you must exit the building now!"); 
    } 
} 

另外,这将有助于发布我的这个程序的其他类吗?

+2

你不能添加一个实例变量来存储currentFloor吗? – 2013-03-24 19:23:26

+0

谢谢大家。我的工作很棒! – user2120893 2013-03-24 22:29:56

+0

尝试用多个电梯的问题,人可以登上任何先来的电梯! – abhi 2015-09-30 14:21:39

回答

2

Elevator应该有一个currentFloor场,像这样:

private int currentFloor; 

然后,在selectFloor,你需要找到方向。此外,在selectFloor中,else if是不必要的。

public class Elevator { 
    private int currentFloor; 

    public Elevator() { 
     currentFloor = 0; 
    } 

    public void selectFloor() { 
     Scanner scnr = new Scanner(System.in); 
     int newFloor; 

     System.out.println("Enter the floor you'd like to go to ==> "); 
     newFloor = scnr.nextInt(); 
     if (newFloor > 100 || newFloor < 0 || newFloor == 13) { 
      System.out.println("Invalid selection"); 
     } 

     else { // The if was not necessary 
      int direction = 0; 
      if(currentFloor < newFloor){ 
       direction = 1; // going up; 
      } else if (currentFloor > newFloor) { 
       direction = -1; //going down; 
      } else { 
       direction = 0; //going nowhere; 
      } 
      for (; currentFloor != newFloor; currentFloor += newFloor) 
       System.out.println("..." + i); 
       System.out.println("Ding!"); 
     } 
    } 

    public void fireAlarm() { 
     System.out.println("Danger, you must exit the building now!"); 
    } 
} 

注:我还没有测试过,所以我不能确定它是正确的。

0

由班开班标签下直接加入private int floor;给你Elevator对象的类变量。 (在Elevator类构造函数上方)。这个变量将直接绑定到包含它的Elevator对象。

当您创建使用new Elevator你也有随时可用的int值,以保持地面的电梯的方式。要访问此值,请构建一个getter和setter方法。它们应该如下所示:

public void setFloor(int floor) { 
    this.floor = floor; 
} 

public int getFloor() { 
    return floor; 
} 

然后您可以调用这两种方法设置楼层号并获得楼层号。要跟踪记录,在selectFloor方法中,您需要使用setFloor并在进行有效选择后传递楼层号。然后,您可以使用getFloor来确定它是否会上涨或下跌。

为了使您的构造函数中设置的floor变量在1创建一个新的电梯对象时。只需更改您的构造函数,看起来像这样:

public Elevator() { 
    setFloor(1); 
} 

希望这有助于!如果您对这些事情的工作方式有任何疑问,请告诉我,我会尽量提供更多详细信息。

+0

我不完全确定如何在我的selectFloor方法中实现getFloor和setFloor。到目前为止,我在floor = scnr.nextInt()之后放置了setFloor(floor),但是我不确定这些作品 – user2120893 2013-03-24 20:12:42

0

我刚刚插入了一个名为backToBasement()的新方法,并将它绑定到了selectFloor()方法中。希望它有帮助。

public void selectFloor() { 
     Scanner scnr = new Scanner(System.in); 
     int newFloor; 

     System.out.println("Enter the floor you'd like to go to ==> "); 
     newFloor = scnr.nextInt(); 
     if (newFloor > 100 || newFloor < 0 || newFloor == 13) { 
      System.out.println("Invalid selection"); 
     } 

     else if (newFloor <= 100 && newFloor > 0 && newFloor != 13) { 
      for (int i = 1; i <= newFloor; i++) 
       System.out.println("..." + i); 
       System.out.println("Ding!"); 
       backToBasement(newFloor); 
     } 
    } 

    public void fireAlarm() { 
     System.out.println("Danger, you must exit the building now!"); 
    } 

    public void backToBasement(int newFloor){ 
     for (int i=newFloor; i>0;i--){ 
      System.out.println("..." + i); 
     } 
     System.out.println("Ding!... Back to Ground Level"); 

    } 
1

enter image description here

每个按钮按压结果,其中具有要被服务的电梯请求。这些请求中的每一个都在全球范围内进行跟踪。 ElevatorRequests - 存储电梯请求的类可以使用不同的策略来安排电梯请求。电梯由我们称为ElevatorController的控制器类控制。电梯控制器指示电梯执行什么操作,还可以关闭/启动建筑物的电梯。电梯控制器读取下一个要处理的电梯请求并提供。

按钮是抽象类,定义像illuminate,doNotIlluminate这样的常见行为。FloorButton,ElevatorButton扩展Button类型并定义当按下按钮时调用的placeRequest()。楼层按钮按下和电梯按钮按下在一个共同的地方添加请求。

ElevatorController通过读取下一个请求来处理并指示电梯该做什么来运行该节目。