溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Java怎么編寫一個電梯系統(tǒng)

發(fā)布時間:2021-04-17 17:29:35 來源:億速云 閱讀:407 作者:Leah 欄目:編程語言

本篇文章為大家展示了使用Java怎么編寫一個電梯系統(tǒng),內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

 電梯類

package Ele;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

public class Elevator {
  private List<Integer> upFloorList = new ArrayList<Integer>();    // 上升樓層
  private List<Integer> downFloorList = new ArrayList<Integer>();   // 下降樓層
  private int[] storeyWeight; // 目標層重量
  private int capacity;    // 電梯最大重量
  private int topFloor;    // 電梯最高層
  private int bottomFloor;  // 電梯最底層
  private int nowFloor = 1;  // 當前層

  public Elevator(int bottomFloor, int topFloor, int capacity) { //有參構(gòu)造方法
    this.topFloor = topFloor;
    this.bottomFloor = bottomFloor;
    this.capacity = capacity;

    // 當前樓層減最低層,就是當前層重量的下標 假如當前樓層為5樓,5樓下標就是 5-1 = 4
    // 初始化目標樓層重量,數(shù)組大小 = 最高層 - 最低層 + 1
    storeyWeight = new int[(topFloor - bottomFloor + 1)];
  }

  // 設置樓層
  public void SetFloor(int floorNum) {
    //如果 所選樓層 與 所在樓層 相同,則提示
    if (floorNum == nowFloor) {
      System.out.println("請選擇其它樓層");
      return;
    }

    // 生成90-500之間的隨機重量
    Random random = new Random();
    int thisFloorWeight = random.nextInt(500 - 90 + 1) + 90;

    int sum = 0;
    //目標樓層增加的重量
    for (int i = 0; i < storeyWeight.length; i++) {
      sum += storeyWeight[i];
    }
    //原重量+增加重量=當前重量
    System.out.println(floorNum + "層上來重量:" + thisFloorWeight + ",此時總重:" + (sum + thisFloorWeight));

    // 如果 目標樓層總重量 > 最大重量,提示
    if (sum + thisFloorWeight > this.capacity) {
      System.out.println("超重了喲");
      return;
    }

    // 當前輸入樓層重量加上該樓層新增加重量 后的重量
    storeyWeight[floorNum - bottomFloor] += thisFloorWeight;

    //如果輸入樓層數(shù) 已經(jīng)在上升或下降樓層的集合中,則只新增重量,不添加樓層
    if (!upFloorList.contains(floorNum) && !downFloorList.contains(floorNum)) {
      if (floorNum > nowFloor) {
        upFloorList.add(floorNum);

        // 上升樓層升序排序
        Collections.sort(upFloorList);

      } else {
        downFloorList.add(floorNum);

        // 下降樓層降序排序
        downFloorList.sort(Collections.reverseOrder());
      }
    }
  }

  // 上升:從所在層到所選樓層中的最高層
  // 下降:從所在層到所選樓層中的最低層
  // 獲得集合中最后一個元素:list.get(list.size()-1);

  // 啟動電梯
  public void StartElevator() throws InterruptedException {
    System.out.println("當前第 < " + nowFloor + " > 層");
    // 上行
    if (upFloorList.size() > 0) {
      System.out.println("---電梯上行---");
      for (int i = nowFloor + 1; i <= upFloorList.get(upFloorList.size() - 1); i++) {
        Thread.sleep(500);
        System.out.println("---第" + i + "層---");
        if (upFloorList.contains(i)) {
          System.out.println(" ☆開門☆");
          nowFloor = i;
          upFloorList.remove(upFloorList.indexOf(i));
          storeyWeight[i - bottomFloor] = 0;

          if (upFloorList.size() > 0) {
            System.out.println("剩余所選層數(shù)為:");
            Iterator it = upFloorList.iterator();
            while (it.hasNext()) {
              int floor = (int) it.next();
              System.out.print(floor + "層 重量:" + storeyWeight[floor - bottomFloor] + " ");
            }
            System.out.println();
          }
          return;
        }
      }
    }

    // 下行
    if (downFloorList.size() > 0) {
      System.out.println("---電梯下行---");
      for (int i = nowFloor - 1; i >= bottomFloor; i--) {
        Thread.sleep(500);
        System.out.println("---第" + i + "層---");
        if (downFloorList.contains(i)) {
          System.out.println(" ☆開門☆");
          nowFloor = i;
          downFloorList.remove(downFloorList.indexOf(i));
          storeyWeight[i - bottomFloor] = 0;
          if (downFloorList.size() > 0) {
            System.out.println("剩余所選層數(shù)為:");
            Iterator it = downFloorList.iterator();
            while (it.hasNext()) {
              int floor = (int) it.next();
              System.out.print(floor + "層 重量:" + storeyWeight[floor - bottomFloor] + " ");
            }
            System.out.println();
          }
          return;
        }
      }
    }
    System.out.println("無客");

  }
}

2.2 程序入口

package com.company;


import Ele.Elevator;

import java.util.Scanner;

public class Main {

  public static void main(String[] args) throws InterruptedException {
    // 創(chuàng)建一個電梯
    int bottomFloor = 1;  // 最低層1樓
    int topFloor = 12;   // 最高層12樓
    int capacity = 1000;  // 最大承重1000
    Elevator elvator = new Elevator(bottomFloor, topFloor, capacity);

    System.out.println("當前電梯可選擇" + bottomFloor + "-" + topFloor + "層,請選擇樓層數(shù)(輸入-1表示關閉電梯門):");

    //輸入內(nèi)容
    Scanner scanner = new Scanner(System.in);
    while (scanner.hasNextLine()) {
      //如果輸入不是數(shù)字,提示后,再次輸入
      if (!scanner.hasNextInt()) {
        System.out.println("請輸入數(shù)字!");
        scanner.next();
      }

      //輸入是數(shù)字則進行以下操作
      else {
        int num = scanner.nextInt();
        //若輸入數(shù)字為-1,意為結(jié)束輸入,啟動電梯
        if (num == -1) {
          System.out.println("------------------------");
          System.out.println("電梯門關閉,開始啟動");
          elvator.StartElevator();
        } else if (num > topFloor || num < bottomFloor || num == 0) {
          //若輸入數(shù)字不符合樓層數(shù),則提示并再次輸入
          System.out.println("請選擇1-12樓層。");
        } else {
          elvator.SetFloor(num);
        }
      }
    }
  }
}

三、總結(jié)

這個簡易電梯程序,基本實現(xiàn)了電梯的上行和下行判斷,當選擇多個樓層時,可以對同為上行或下行的目標樓層自動排序依次到達,每個目標樓層會隨機生成乘客重量并記錄。

在寫這個程序時,遇見了一些問題:

1. 使用while語句接收用戶輸入時,判斷輸入是否為數(shù)字,輸入不是數(shù)字會陷入死循環(huán)提示。在此增加了scanner.next()語句,提示后可以繼續(xù)輸入。

 if (!scanner.hasNextInt()) {
        System.out.println("請輸入數(shù)字!");
        scanner.next();
      }

2. 若重復選擇某樓層,到達該樓層后,仍會顯示該樓層為剩余樓層。在此增加了判斷語句,如果選擇的樓層數(shù)已經(jīng)存在于上升或下降目標樓層的集合中,則只增加重量,不會重復添加目標樓層。

if (!upFloorList.contains(floorNum) && !downFloorList.contains(floorNum)) {
      if (floorNum > nowFloor) {
        upFloorList.add(floorNum);

        // 上升樓層升序排序
        Collections.sort(upFloorList);

      } else {
        downFloorList.add(floorNum);

        // 下降樓層降序排序
        downFloorList.sort(Collections.reverseOrder());
      }
    }
  }

上述內(nèi)容就是使用Java怎么編寫一個電梯系統(tǒng),你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI