国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java代碼實踐12306售票算法(二)

2019-11-26 14:33:30
字體:
來源:轉載
供稿:網友

周五閑來無事,基于上一篇關于淺析12306售票算法(java版)理論,進行了java編碼實踐供各位讀者參考(以下為相關代碼的簡單描述)

1.訂票工具類

1.1初始化一列車廂的票據信息

/*** 生成Ticket信息** @param train* @return*/public static List<Ticket> initTicketList(Train train) {List<Ticket> result = new ArrayList<Ticket>();Map<String, Integer> seatMap = train.getSeatTotalNum();for (Entry<String, Integer> entry : seatMap.entrySet()) {int ticketSize = entry.getValue();String ticketType = entry.getKey();for (int i = 0; i < ticketSize; i++) {int saleChannel = (int) (Math.random() * 10) % 8;Ticket ticket = new Ticket();ticket.setSaleChannel(saleChannel);ticket.setTicketType(ticketType);ticket.setGuid(UUID.randomUUID().toString());ticket.setFromDate(train.getFromDate());ticket.setTicketFlag(CommonUtil.initTicketFlag(train));ticket.setTrainNo(train.getTrainNo());result.add(ticket);}}return result;}

1.2 生成站點購票(比如說第進行移位即可如第1站1,第二站‘10' 這里返回的十進制的)

/*** 創建* @param i* @param stationNum* @return*/public static String buidTicket(int i, int stationNum) {BigInteger temp = new BigInteger("0");for (int j = i; j < stationNum; j++) {temp = temp.or(new BigInteger(buidTicket(j)));}return temp.shiftRight(1).toString();}

1.3 訂票主程序,這里一次只定一張票(A=A|B)

/*** 根據篩選條件取得對應的車次* @param ticketStr* @param ticketList* @param condition* @return*/public static Order createOrderByCondition(String ticketStr,List<Ticket> ticketList,Map condition){Order tempOrder = null;for (Ticket ticket : ticketList) {BigInteger toTicket = new BigInteger(ticketStr);BigInteger fromTicket = new BigInteger(ticket.getTicketFlag());// 如果可以訂票,那么久進行扣除庫存&&// (ticket.getSaleChannel()==(ticket.getSaleChannel()|1))if (canTicket(fromTicket, toTicket)&&ticket.getTicketType().equals(condition.get("ticketType").toString())//&&(ticket.getSaleChannel()==(ticket.getSaleChannel()|2))) {tempOrder = new Order();tempOrder.setOrderId(UUID.randomUUID().toString());tempOrder.setSeatType(ticket.getTicketType());tempOrder.setTicketFlag(toTicket.toString());tempOrder.setTrainNO(ticket.getTrainNo());tempOrder.setFromDate(ticket.getFromDate());tempOrder.setSaleChannel(ticket.getSaleChannel());tempOrder.setTicketGuid(ticket.getGuid());ticket.setTicketFlag(fromTicket.or(toTicket).toString());break;}}return tempOrder;}

1.4 判斷是否郵票,A=~(~A|B)

/*** 訂票判斷是否可以訂票** @param fromTicket* @param toTicket* @return*/private static boolean canTicket(BigInteger fromTicket, BigInteger toTicket) {return fromTicket.equals(fromTicket.not().or(toTicket).not());}

2.訂單實體(保留必要的訂單信息)

package com.train.ticket;/*** 訂單實體* @author guo_zhifeng**/public class Order {private String orderId;private String ticketGuid;//票據idprivate String ticketFlag;//訂票標記private String seatType;//座位類型private String fromDate;//發車日期private String trainNO;//列車編號private int saleChannel;//銷售渠道public String getOrderId() {return orderId;}public void setOrderId(String orderId) {this.orderId = orderId;}public String getTicketGuid() {return ticketGuid;}public void setTicketGuid(String ticketGuid) {this.ticketGuid = ticketGuid;}public String getTicketFlag() {return ticketFlag;}public void setTicketFlag(String ticketFlag) {this.ticketFlag = ticketFlag;}public String getSeatType() {return seatType;}public void setSeatType(String seatType) {this.seatType = seatType;}public String getFromDate() {return fromDate;}public void setFromDate(String fromDate) {this.fromDate = fromDate;}public String getTrainNO() {return trainNO;}public void setTrainNO(String trainNO) {this.trainNO = trainNO;}public int getSaleChannel() {return saleChannel;}public void setSaleChannel(int saleChannel) {this.saleChannel = saleChannel;}}

3.票務實體(保留必要的票務信息)

package com.train.ticket;/*** 票務實體* @author guo_zhifeng**/public class Ticket {private String ticketFlag;private String ticketType;private int saleChannel;private String trainNo;private String guid;private String fromDate;//發車日期public String getGuid() {return guid;}public void setGuid(String guid) {this.guid = guid;}public String getTrainNo() {return trainNo;}public void setTrainNo(String trainNo) {this.trainNo = trainNo;}public String getTicketFlag() {return ticketFlag;}public void setTicketFlag(String ticketFlag) {this.ticketFlag = ticketFlag;}public String getTicketType() {return ticketType;}public void setTicketType(String ticketType) {this.ticketType = ticketType;}public int getSaleChannel() {return saleChannel;}public void setSaleChannel(int saleChannel) {this.saleChannel = saleChannel;}public String getFromDate() {return fromDate;}public void setFromDate(String fromDate) {this.fromDate = fromDate;}}

4.列車初始化信息(只進行主要信息)

package com.train.ticket;import java.util.Map;/*** 某一趟的列車的信息* @author guo_zhifeng**/public class Train {private String trainNo;// 火車編號private int stationNum;// 車站數量private Map<String, Integer> seatTotalNum;// 各種座位的數量private String fromDate;public String getFromDate() {return fromDate;}public void setFromDate(String fromDate) {this.fromDate = fromDate;}public String getTrainNo() {return trainNo;}public void setTrainNo(String trainNo) {this.trainNo = trainNo;}public int getStationNum() {return stationNum;}public void setStationNum(int stationNum) {this.stationNum = stationNum;}public Map<String, Integer> getSeatTotalNum() {return seatTotalNum;}public void setSeatTotalNum(Map<String, Integer> seatTotalNum) {this.seatTotalNum = seatTotalNum;}}

5.主程序

5.1初始化一列車廂

5.2按照逐站購票的形式,最大化 即 AB BC CD DE EF等等

5.3輸出耗時時間

package com.train.main;import java.io.File;import java.math.BigDecimal;import java.math.BigInteger;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.train.ticket.Order;import com.train.ticket.Ticket;import com.train.ticket.Train;import com.train.util.CommonUtil;public class MainTest {public static void main(String[] args) {Train train = new Train();train.setTrainNo("SA");train.setFromDate("http://");train.setStationNum();Map<String, Integer> seatMap = new HashMap<String, Integer>();seatMap.put("商務座", );seatMap.put("一等座", );seatMap.put("二等座", );train.setSeatTotalNum(seatMap);// 生成票據System.out.println("初始化列車中的票");List<Ticket> ticketList = CommonUtil.initTicketList(train);String fileName = "D://RESULT.txt";File f = new File(fileName);if(f.exists()) f.delete();long startTime = System.currentTimeMillis();//int i = ;//for (Ticket ticket : ticketList) {// CommonUtil.appendMethodA(fileName,// i + "||" + CommonUtil.toJSON(ticket) + "/n", true);// i++;//}System.out.println("開始訂票");long beginTime = System.currentTimeMillis();List<Order> orderResult = new ArrayList<Order>();for (int j = ; j < train.getStationNum() - ; j++) {String ticketStr = CommonUtil.buidTicket(j);//String ticketStr = CommonUtil.buidTicket(,train.getStationNum());;//System.exit();List<Order> tempListOrder = CommonUtil.createOrderList(ticketStr,ticketList, train);orderResult.addAll(tempListOrder);}long endTime = System.currentTimeMillis();System.out.println("訂票完成");//int m = ;// for (Ticket ticket : ticketList) {// String temp = m + "||" + CommonUtil.toJSON(ticket) + ",";// // System.out.println(temp);// CommonUtil.appendMethodA(fileName, temp, true);// m++;// }// int k = ;// for (Order order : orderResult) {// String temp = order.getOrderId() // + "||" + order.getSaleChannel() // + "||" + order.getFromDate() // + "||" + order.getSeatType() // + "||" + order.getTicketGuid()// + "||" + order.getTrainNO() // + "||" + order.getTicketFlag()// + "||" + new BigInteger(order.getTicketFlag()).toString()// + "||" +k;// CommonUtil.appendMethodA(fileName,temp, true);// k++;// }long eedTime = System.currentTimeMillis();System.out.println("生成訂單" + orderResult.size() + "||耗時時間:"+ (endTime - beginTime) + "毫秒");System.out.println("每秒鐘生成單據數(逐張訂票)"+ new BigDecimal(orderResult.size()).multiply(new BigDecimal()).divide(new BigDecimal(endTime - beginTime),,BigDecimal.ROUND_HALF_DOWN));System.out.println("執行完畢");}}

6.運行結果

以上所述是小編給大家介紹的Java代碼實踐12306售票算法(二),希望對大家有所幫助!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 濮阳县| 玉环县| 特克斯县| 扬中市| 昭苏县| 陇川县| 六盘水市| 改则县| 泌阳县| 新营市| 湛江市| 综艺| 肇庆市| 青田县| 明星| 桐城市| 石阡县| 承德县| 黎城县| 石渠县| 西平县| 鲜城| 永城市| 卓尼县| 肥城市| 吉林省| 苍梧县| 台中县| 尉犁县| 吴桥县| 馆陶县| 翼城县| 齐齐哈尔市| 惠来县| 乐山市| 敦化市| 碌曲县| 始兴县| 舞钢市| 隆德县| 吉安市|