欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2016年02月21日 10:03:02   作者:全城熱戀  
這篇文章主要介紹了Java代碼實踐12306售票算法(二)的相關(guān)資料,需要的朋友可以參考下

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

1.訂票工具類

1.1初始化一列車廂的票據(jù)信息

/**
* 生成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 生成站點購票(比如說第進(jìn)行移位即可如第1站1,第二站‘10' 這里返回的十進(jìn)制的)

/**
* 創(chuàng)建
* @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)

/**
* 根據(jù)篩選條件取得對應(yīng)的車次
* @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());
// 如果可以訂票,那么久進(jìn)行扣除庫存&&
// (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;//票據(jù)id
private String ticketFlag;//訂票標(biāo)記
private String seatType;//座位類型
private String fromDate;//發(fā)車日期
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.票務(wù)實體(保留必要的票務(wù)信息)

package com.train.ticket;
/**
* 票務(wù)實體
* @author guo_zhifeng
*
*/
public class Ticket {
private String ticketFlag;
private String ticketType;
private int saleChannel;
private String trainNo;
private String guid;
private String fromDate;//發(fā)車日期
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.列車初始化信息(只進(jìn)行主要信息)

package com.train.ticket;
import java.util.Map;
/**
* 某一趟的列車的信息
* @author guo_zhifeng
*
*/
public class Train {
private String trainNo;// 火車編號
private int stationNum;// 車站數(shù)量
private Map<String, Integer> seatTotalNum;// 各種座位的數(shù)量
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("商務(wù)座", );
seatMap.put("一等座", );
seatMap.put("二等座", );
train.setSeatTotalNum(seatMap);
// 生成票據(jù)
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("每秒鐘生成單據(jù)數(shù)(逐張訂票)"+ new BigDecimal(orderResult.size()).multiply(new BigDecimal()).divide(new BigDecimal(endTime - beginTime),,BigDecimal.ROUND_HALF_DOWN));
System.out.println("執(zhí)行完畢");
}
}

6.運(yùn)行結(jié)果

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

相關(guān)文章

  • 詳解Java線程中常用操作

    詳解Java線程中常用操作

    這篇文章主要為大家詳細(xì)介紹了一下Java線程中的一些常用操作,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下
    2022-05-05
  • SpringCloud?Feign超詳細(xì)講解

    SpringCloud?Feign超詳細(xì)講解

    Feign是Netflix公司開發(fā)的一個聲明式的REST調(diào)用客戶端;?Ribbon負(fù)載均衡、?Hystrⅸ服務(wù)熔斷是我們Spring?Cloud中進(jìn)行微服務(wù)開發(fā)非常基礎(chǔ)的組件,在使用的過程中我們也發(fā)現(xiàn)它們一般都是同時出現(xiàn)的,而且配置也都非常相似
    2022-10-10
  • Eureka源碼解析服務(wù)離線狀態(tài)變更

    Eureka源碼解析服務(wù)離線狀態(tài)變更

    這篇文章主要為大家介紹了Eureka源碼解析服務(wù)離線的狀態(tài)變更示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 在Mybatis @Select注解中實現(xiàn)拼寫動態(tài)sql

    在Mybatis @Select注解中實現(xiàn)拼寫動態(tài)sql

    這篇文章主要介紹了在Mybatis @Select注解中實現(xiàn)拼寫動態(tài)sql,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • 深入理解java.lang.String類的不可變性

    深入理解java.lang.String類的不可變性

    不可變類只是其實例不能被修改的類。每個實例中包含的所有信息都必須在創(chuàng)建該實例的時候就提供,并且在對象的整個生命周期內(nèi)固定不變,感興趣的可以了解一下
    2021-06-06
  • windows下使用 intellij idea 編譯 kafka 源碼環(huán)境

    windows下使用 intellij idea 編譯 kafka 源碼環(huán)境

    這篇文章主要介紹了使用 intellij idea 編譯 kafka 源碼的環(huán)境,本文是基于windows下做的項目演示,需要的朋友可以參考下
    2021-10-10
  • SpringBoot+Vue+Axios+BootStrap實現(xiàn)圖書的增刪改查功能示例

    SpringBoot+Vue+Axios+BootStrap實現(xiàn)圖書的增刪改查功能示例

    本文主要介紹了SpringBoot+Vue+Axios+BootStrap實現(xiàn)圖書的增刪改查功能,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Java編程中void方法的學(xué)習(xí)教程

    Java編程中void方法的學(xué)習(xí)教程

    這篇文章主要介紹了Java編程中void方法的學(xué)習(xí)教程,包括對void方法進(jìn)行單元測試,需要的朋友可以參考下
    2015-10-10
  • Jmeter參數(shù)化實現(xiàn)原理及過程解析

    Jmeter參數(shù)化實現(xiàn)原理及過程解析

    這篇文章主要介紹了Jmeter參數(shù)化實現(xiàn)原理及過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • SpringMVC對日期類型的轉(zhuǎn)換示例

    SpringMVC對日期類型的轉(zhuǎn)換示例

    本篇文章主要介紹了SpringMVC對日期類型的轉(zhuǎn)換示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02

最新評論