最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Java的電梯系統(tǒng)實(shí)現(xiàn)過(guò)程

 更新時(shí)間:2019年10月24日 10:27:31   作者:百畝  
這篇文章主要介紹了基于Java的電梯系統(tǒng)實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一、思路

寫一個(gè)簡(jiǎn)單的電梯系統(tǒng),首先根據(jù)老師提供的需求,寫一下基礎(chǔ)思路:

  • 電梯有最高層和最低層,輸入數(shù)字選擇正確樓層數(shù)
  • 輸入數(shù)字大于當(dāng)前樓層,則為上行;小于當(dāng)前樓層,則為下行
  • 每次輸入數(shù)字的時(shí)候,需要對(duì)同為上行的數(shù)字或者同為下行的數(shù)字,進(jìn)行排序
  • 所輸入的目標(biāo)樓層用集合存放,循環(huán)最低層到最高層,如果當(dāng)前層在集合中存在,顯示開門,若還有目標(biāo)樓層,則關(guān)門,繼續(xù)到下一目標(biāo)樓層。
  • 當(dāng)選擇一個(gè)目標(biāo)樓層,會(huì)生成隨機(jī)重量記錄在目標(biāo)樓層,上行用原來(lái)重量加上目標(biāo)樓層重量,下行則用原來(lái)重量減去目標(biāo)樓層重量

二、實(shí)現(xiàn)

2.1 電梯類

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; // 目標(biāo)層重量
  private int capacity;    // 電梯最大重量
  private int topFloor;    // 電梯最高層
  private int bottomFloor;  // 電梯最底層
  private int nowFloor = 1;  // 當(dāng)前層

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

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

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

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

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

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

    // 當(dāng)前輸入樓層重量加上該樓層新增加重量 后的重量
    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());
      }
    }
  }

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

  // 啟動(dòng)電梯
  public void StartElevator() throws InterruptedException {
    System.out.println("當(dāng)前第 < " + 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("無(wú)客");

  }
}

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)建一個(gè)電梯
    int bottomFloor = 1;  // 最低層1樓
    int topFloor = 12;   // 最高層12樓
    int capacity = 1000;  // 最大承重1000
    Elevator elvator = new Elevator(bottomFloor, topFloor, capacity);

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

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

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

三、總結(jié)

這個(gè)簡(jiǎn)易電梯程序,基本實(shí)現(xiàn)了電梯的上行和下行判斷,當(dāng)選擇多個(gè)樓層時(shí),可以對(duì)同為上行或下行的目標(biāo)樓層自動(dòng)排序依次到達(dá),每個(gè)目標(biāo)樓層會(huì)隨機(jī)生成乘客重量并記錄。

在寫這個(gè)程序時(shí),遇見了一些問題:

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

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

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

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

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

      } else {
        downFloorList.add(floorNum);

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

3. 將目標(biāo)樓層隨機(jī)產(chǎn)生的重量存放于一個(gè)數(shù)組中,當(dāng)前樓層減最低層,就是當(dāng)前層重量的下標(biāo),假如當(dāng)前樓層為5樓,5樓下標(biāo)就是 5-1 = 4,storeyWeight[4]即為5樓重量。

代碼還有不完善的地方,例如若從1到8層上升時(shí),6層有人也要乘坐電梯,如何滿足在6層停止并上人后,繼續(xù)上行。這些還有待我繼續(xù)完善,也望請(qǐng)大家批評(píng)指正

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解SpringBoot Controller接收參數(shù)的幾種常用方式

    詳解SpringBoot Controller接收參數(shù)的幾種常用方式

    這篇文章主要介紹了詳解SpringBoot Controller接收參數(shù)的幾種常用方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java字符編碼原理(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)

    Java字符編碼原理(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)

    Java開發(fā)中,常常會(huì)遇到亂碼的問題,一旦遇到這種問題,常常比較煩惱,大家都不想承認(rèn)是自己的代碼問題,其實(shí)搞明白編碼的本質(zhì)過(guò)程就簡(jiǎn)單多了,接下來(lái)小編給大家?guī)?lái)java字符編碼原理,要求看看吧
    2017-04-04
  • Spring Boot配置特定屬性spring.profiles的方法

    Spring Boot配置特定屬性spring.profiles的方法

    這篇文章主要介紹了Spring Boot配置特定屬性spring.profiles的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • 基于javaweb+jsp的游泳館會(huì)員管理系統(tǒng)(附源碼)

    基于javaweb+jsp的游泳館會(huì)員管理系統(tǒng)(附源碼)

    這篇文章主要介紹了基于javaweb+jsp的游泳館會(huì)員管理系統(tǒng),開發(fā)工具eclipse/idea/myeclipse/sts等均可配置運(yùn)行,此源代碼社和課程設(shè)計(jì),大作業(yè)及畢業(yè)設(shè)計(jì)項(xiàng)目,需要的朋友可以參考下
    2022-04-04
  • 淺談@RequestParam(required = true)的誤區(qū)

    淺談@RequestParam(required = true)的誤區(qū)

    這篇文章主要介紹了@RequestParam(required = true)的誤區(qū),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring?Cloud?通過(guò)?Gateway?webflux實(shí)現(xiàn)網(wǎng)關(guān)異常處理

    Spring?Cloud?通過(guò)?Gateway?webflux實(shí)現(xiàn)網(wǎng)關(guān)異常處理

    在某一個(gè)服務(wù)中出現(xiàn)異常,通過(guò)@ControllerAdvice?+?@ExceptionHandler?統(tǒng)一異常處理,即使在微服務(wù)架構(gòu)中,也可以將上述統(tǒng)一異常處理放入到公共的微服務(wù)中,這樣哪一個(gè)微服務(wù)需要,直接引入模塊,本文重點(diǎn)介紹Spring?Cloud?通過(guò)?Gateway?webflux實(shí)現(xiàn)網(wǎng)關(guān)異常處理,一起看看吧
    2023-11-11
  • Java對(duì)象的復(fù)制三種方式(小結(jié))

    Java對(duì)象的復(fù)制三種方式(小結(jié))

    這篇文章主要介紹了Java對(duì)象的復(fù)制三種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Java線程組操作實(shí)例分析

    Java線程組操作實(shí)例分析

    這篇文章主要介紹了Java線程組操作,結(jié)合實(shí)例形式分析了ThreadGroup類創(chuàng)建與使用線程組相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • Java關(guān)鍵字之instanceof詳解

    Java關(guān)鍵字之instanceof詳解

    instanceof是Java的一個(gè)二元操作符,和==,>,<是同一類東東。由于它是由字母組成的,所以也是Java的保留關(guān)鍵字。它的作用是測(cè)試它左邊的對(duì)象是否是它右邊的類的實(shí)例,返回boolean類型的數(shù)據(jù)
    2021-11-11
  • Spring Security SecurityContextHolder組件示例說(shuō)明

    Spring Security SecurityContextHolder組件示例說(shuō)明

    SpringSecurity的SecurityContextHolder組件是存儲(chǔ)當(dāng)前安全上下文的地方,包括認(rèn)證用戶信息,它支持全局訪問、線程局部存儲(chǔ)和上下文傳播,是SpringSecurity認(rèn)證和授權(quán)的核心,文章通過(guò)示例展示了如何訪問已認(rèn)證用戶的詳細(xì)信息、手動(dòng)設(shè)置認(rèn)證信息以及使用認(rèn)證信息保護(hù)方法
    2024-11-11

最新評(píng)論

桃园市| 罗城| 台南市| 盐源县| 白沙| 安图县| 泾阳县| 会理县| 广饶县| 青铜峡市| 巴青县| 漳州市| 宁化县| 沁阳市| 永丰县| 滦南县| 酒泉市| 漳浦县| 孟津县| 枣阳市| 红安县| 新晃| 敦化市| 武隆县| 岱山县| 罗江县| 罗甸县| 常熟市| 高淳县| 阜新| 莫力| 西昌市| 新蔡县| 昭通市| 泗水县| 弥勒县| 娱乐| 长葛市| 安阳县| 秦皇岛市| 石首市|