2013-03-24 67 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通過讀取下一個請求來處理並指示電梯該做什麼來運行該節目。