Java代码实践12306售票算法(二)

周五闲来无事,基于上一篇关于浅析12306售票算法(java版)理论,进行了java编码实践供各位读者参考(以下为相关代码的简单描述)

1.订票工具类

1.1初始化一列车厢的票据信息

/**

* 生成Ticket信息

*

* @param train

* @return

*/

public static List initTicketList(Train train) {

List result = new ArrayList();

Map seatMap = train.getSeatTotalNum();

for (Entry 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 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;//票据id

private 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 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 getSeatTotalNum() {

return seatTotalNum;

}

public void setSeatTotalNum(Map 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("//");

train.setStationNum();

Map seatMap = new HashMap();

seatMap.put("商务座", );

seatMap.put("一等座", );

seatMap.put("二等座", );

train.setSeatTotalNum(seatMap);

// 生成票据

System.out.println("初始化列车中的票");

List 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 orderResult = new ArrayList();

for (int j = ; j < train.getStationNum() - ; j++) {

String ticketStr = CommonUtil.buidTicket(j);

//String ticketStr = CommonUtil.buidTicket(,train.getStationNum());;

//System.exit();

List 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售票算法(二),希望对大家有所帮助!相关阅读:

4种java复制文件的方式

jQuery中replaceAll()方法用法实例

javascript 小数乘法结果错误的处理方法

php针对cookie操作的队列操作类实例

整理HTML5中表单的常用属性及新属性

js实现的tab标签切换效果代码分享

用css给tbody加垂直滚动条的具体思路及样式代码

win10中资源管理器怎么重启?

php判断数组元素中是否存在某个字符串的方法

Android TextView实现跑马灯效果的方法

利用javaScript实现点击输入框弹出窗体选择信息

浅谈C#中的值类型和引用类型

Android完全退出应用程序的方法

使用typeof判断function是否存在于上下文

java按顺序售票方法_java_Java代码实践12306售票算法(二),周五闲来无事,基于上一篇关 - phpStudy...相关推荐

  1. 票据ticket实现方式java代码_Java代码实践12306售票算法(二)

    周五闲来无事,基于上一篇关于浅析12306售票算法(java版)理论,进行了java编码实践供各位读者参考(以下为相关代码的简单描述) 1.订票工具类 1.1初始化一列车厢的票据信息 /** * 生成 ...

  2. 售票java代码_Java代码实践12306售票算法(二)

    周五闲来无事,基于上一篇关于浅析12306售票算法(java版)理论,进行了java编码实践供各位读者参考(以下为相关代码的简单描述) 1.订票工具类 1.1初始化一列车厢的票据信息 /** * 生成 ...

  3. JAVA、PHP统一社会信用代码、身份证号算法解析验证

    JAVA.PHP统一社会信用代码.身份证号算法解析验证 这是给某机关单位写系统的时候要验证统一社会信用代码用的是PHP写的方法 java的话也是同理有时间我再把java代码贴出来,这就先贴PHP JA ...

  4. java生成缩略图例子_具体介绍java生成缩略图的方法示例代码

    这篇文章主要介绍了java生成缩略图的方法,结合具体实例形式分析了java生成缩略图过程中所涉及的各种常见的图形处理技巧,需要的朋友可以参考下 本文实例讲述了java生成缩略图的方法.分享给大家供大家 ...

  5. 爱可可推荐!关于竞赛思路,方法和代码实践,Datawhale数据竞赛Baseline开源分享!...

    数据竞赛中baseline是最入门的分享, 它不仅有思路.方法还有内容: 或许你与Top选手的差距就是一个baseline! 01 项目介绍 如果你是数据竞赛的初学者.爱好者,比赛的baseline不 ...

  6. 爱可可推荐!关于竞赛思路,方法和代码实践,数据竞赛Baseline开源分享!

    数据竞赛中baseline是最入门的分享, 它不仅有思路.方法还有内容: 或许你与Top选手的差距就是一个baseline! 01 项目介绍 如果你是数据竞赛的初学者.爱好者,比赛的baseline不 ...

  7. Effective Java之请不要在新代码中使用原生态类型(二十三)

    1.泛型与原生态类型的概念 泛型就是带一个或多个类型参数E的类或者接口,而原生态类型是不带任何实际类型的泛型,例如List是原生态类型,List < String >或者List< ...

  8. 撒花!算法岗必须复现的上百篇经典论文代码完结啦! | 附下载链接

    经常会看到类似的广告<面试算法岗,你被要求复现论文了吗?>不好意思,我真的被问过这个问题.当然也不是所有面试官都会问,究其原因,其实也很好理解.企业肯定是希望自己的产品是有竞争力,有卖点的 ...

  9. 售票java代码_初探12306售票算法(二)-java代码实践

    周五闲来无事,基于上一篇关于初探12306售票算法(一)-理论,进行了java编码实践供各位读者参考(以下为相关代码的简单描述) 1.订票工具类 1.1初始化一列车厢的票据信息 /** * 生成Tic ...

最新文章

  1. Netbeans ClassFormatException: Invalid byte tag in
  2. error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
  3. kafka数据文件.log
  4. some screenshot for SAP Fiori smart template resource load
  5. (转)CString工作原理和常见问题分析
  6. 昨晚第一次使用了 NUnit,方才发现它是个好东西,似乎好多好东西其实一直在身边,只是没有勇气去尝试而一直无法体会。...
  7. jquery选择器一
  8. emacs coding UTF-8 保存报错
  9. 在Mac端的 几种文本操作技巧
  10. centos下编译安装Openssl
  11. 批量ping及telnet工具
  12. Vue学习笔记(利用网易云API实现音乐播放器 实例)
  13. plSQL表格、视图名称右击,再点击view查看详情,突然找不到了咋办?
  14. threejs 三面体_Three.js基础探寻五——正二十面体、圆环面等
  15. adsl拨号服务器构建代理池
  16. 服务器数据恢复案例:FreeNAS数据恢复过程记录
  17. CSIG基础研究岗腾讯面试经验
  18. 北京航空航天大学夏令营机试题
  19. 矩阵方程的计算求解(Matlab实现)
  20. mouseenter事件java_javaScript事件(五)事件类型之鼠标事件

热门文章

  1. linux的passwd命令
  2. 程序员的择业/转业机会来啦,先进计算重点突破领域
  3. 一封写给中国学生的信
  4. 股票成交明细 易语言代码
  5. 光环:元宇宙概念及生态发展现状与研判——张子良
  6. 说说核磁样品如何制备的问题!
  7. 随笔1:再见,2020!你好,2021
  8. 微信小程序Android和ios授权,uni-app之APP和小程序微信授权方法
  9. Thawte和Comodo的代码签名证书的区别
  10. 二维数组赋值 java_java二维数组的赋值方法