나는 금요일에 할 일이 없었다. 12306 발권 알고리즘 (Java 버전) 이론 분석에 대한 이전 기사를 기반으로 독자가 참조 할 수있는 Java 코딩 실습을 수행했습니다 (다음은 관련 코드에 대한 간단한 설명입니다).
1. 티켓 예약 도구
1.1 열차 차량의 티켓 정보를 초기화하십시오
/*** 티켓 정보 생성 ** @param train* @return*/public static list <ticket> initticketlist (기차 열차) {list <ticket> result = new arraylist <ticket> (); Map <String, Integer> seatmap = train.getSeatTotalNum (); enther <string, integer> enthertrys 세트 ()) {intval ()) TicketType = endent.getKey (); for (int i = 0; i <티켓; i ++) {int salechannel = (int) (math.random () * 10) % 8; 티켓 티켓 = 새로 ticket (); ticket.setsalechannel (salechannel); ticket.settickettype (tickettype); ticket.setguid (uuid.randomuuid (). tostring ()); ticket.setfromdate ( Train.getFromDate ()); ticket.setTicketFlag (commonutil.initticketflag (train)); ticket.settrainno (train.get.getTrainno ()); result.add (ticket);}} return 결과;}1.2 현장 티켓 구매 생성 (예 : 첫 번째 스테이션 1, 두 번째 스테이션 '10'및 두 번째 스테이션은 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 (buidticket (j))) temp.shiftright (1) .toString ();}1.3 티켓 예약에 대한 주요 절차는 한 번에 하나의 티켓 만 예약됩니다 (a = a | b)
/*** 필터 조건* @param ticketstr* @param ticketlist* @param 조건* @param 조건*/public static order createOrderByCondition (문자열 ticketstr, list <ticket> ticketlist, map 조건) {ord templeder = null; for (ticket : ticketlist) {biginteger = new new -new inger (tickette); biginteger (ticket.getticketflag ()); // 티켓을 예약 할 수 있다면 오랫동안 인벤토리를 공제합니다 && // (ticket.getSalechannel () == (ticket.getSalechannel () | 1)) if (canticket, toticket) && ticket.gettickettype (). equals (조건 ( "tickettype"). tostring ()) // && (ticket.getSalechannel () == (ticket.getSalechannel () | 2)) {templer = new order (); templer.setoRderId (uuid.randomuuid (). toString ()); temporder.setSeatType (ticket.getTicketType ()); templeder.setTicketFlag (toTicket.toString ()); tempder.setTrainno (Ticket.SetTrainNo ()); Tempord er.setfromdate (ticket.getfromdate ()); temperder.setSalechannel (ticket.getSalechannel ()); temper.setticketguid (ticket.getGuid ()); ticket.setTicketFlag (toticket) .ToString ()) .toString ()); returetder;}}.1.4 도장 여부를 결정하려면 a = ~ (~ a | b)
/*** 티켓을 예약 할 수 있는지 확인 ** @param fromTicket* @param toticket* @return*/private static boolean canticket (biginteger fromticket, biginteger toticket) {return fromticket.equals (fromticket.not ().2. 주문 엔티티 (필요한 주문 정보 유지)
패키지 com.train.ticket;/*** 주문 엔티티*@author guo_zhifeng **/public class order {private string ticketguid; // Bill idprivate String TicketFlag; // private string seattype; // SEAT Type Private String from Date; // private public getterd (private string) 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 void void voide {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) {this.fromdate) {this.fromdate) {this.fromdate) gettrainno () {return trainno;} public void settrainno (String trainno) {this.trainno = trainno;} public int getSalechannel () {return salechannel;} public void setsalechannel (int salechannel) {this.salechannel = salchannel;}}3. 발권 단체 (필요한 티켓팅 정보 유지)
패키지 com.train.ticket;/*** 티켓 엔티티*@author guo_zhifeng **/public class 티켓 {private String tickettype; private string tickettype; private int salechannel; private String trainno; 개인 문자열지도; 개인 문자열; gettrainno () {return trainno;} public void settrainno (string trainno) {this.trainno = trainno;} public string getTicketflag () {return ticketflag;} public void setticketflag (String ticketflag) {this.ticketflag = tickettleg; settickettype (String tickettype) {this.tickettype = tickettype;} public int getSalechannel () {return salechannel;} public void setsalechannel (int salechannel) {this.salechannel = salechannel;} public string getfromdate () {return fromdate; thistfomdate; Fromdate;}}4. 열차 초기화 정보 (주요 정보 만)
패키지 com.train.ticket; import java.util.map;/*** 열차에 대한 정보*@author guo_zhifeng **/public class train {private string trainno; // train 번호 개인 int stationnum; // 개인지도 수 <문자열, 정수> SeatTotalNum; // public string (public string); 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; 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.list; import java.util.list; import java.util.map; import com.ticket.ticket.tain.ticket. 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 ( "//"); SEATMAP = NEW HASHMAP <String, integer> (); SeatMap.put ( "비즈니스 시트",); SeatMap.put ( "First Class",); SeatMap.put ( "2 등석",); SeatSeatTotalNum (SeatMap); // 티켓 시스템 생성 ( "TITING in TITICTS"); commonutil.initticketlist (train); String filename = "d : //result.txt"; 파일 f = 새 파일 (filename); if (f.exists ()) f.delete (); long starttime = system.currenttimeMillis (); // int i =; // for (티켓 티켓 : 티켓리스트) {// commonutil.appendmethoda (filename, // i + "||" + commonutil.tojson (ticket) + "/n", true); // i ++; //} system.out.out.println ( "시작"); long begintime = system.currenttimeMillis (); list <sord> orderresult = new ArrayList <order> (); for (int j =; j <rain.getStationNum () -; j ++) {String TicketStr = commonutil.buidticket (j); // String tickettr = commonutil.buidticket (, train.getStationNum ()) ;; // system.exit (); list <dert> 템플리스트 = CommonUtil.createlist (Ticketstttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttr) 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 : ordertresult) {// string temp = Order.getOrder () // + "| + 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 ( "venrest" + orderresult.size () + "|| 시간 소비 시간 :" + (endtime- begintime) + "milliseconds"); System.out.println ( "초당 문서 수를 생성 (티켓으로 주문)" + new bigdecimal (OrderResult.size ()). Divide (new BigDecimal (new BigDecimal (endTime -BegIntime)), BigDecimal.round_half_down);6. 작동 결과
위는 편집자 (II)가 소개 한 Java Code Practice 12306 발권 알고리즘입니다. 나는 그것이 모두에게 도움이되기를 바랍니다!