Eu não tinha nada para fazer na sexta -feira. Com base no artigo anterior sobre a análise da teoria do algoritmo de tickets 12306 (versão Java), conduzi a prática de codificação Java para os leitores se referirem (o seguinte é uma descrição simples do código relevante)
1. Ferramentas de reserva de ingressos
1.1 Inicialize as informações do ingresso de um vagão de trem
/*** Gere Informações do ingresso ** @param trem* @return*/public static list <gress> initticketList (trem de trem) {list <bickle> resultado = new ArrayList <Ticken> (); map <string, integger> satbathmap = trenMap. ticketType = Entry.getKey (); para (int i = 0; i <ticketsize; i ++) {int salechannel = (int) (Math.random () * 10) % 8; Ticket = Novo Ticket (); Ticket.SetSAlechannel (Salechannel); Ticket.SetTicketType (TicketType); Ticket.setGuid (uuid.randomuuid (). Tostring ()); ticket.setFromdate ( tren.getFromdate ()); ticket.setTicketFlag (Commonutil.initticketflag (trem)); ticket.setTrainno (Train.gettrainno ()); resultado.add (ticket);}} retornar resultado;}1.2 Gere a compra do ingresso do local (por exemplo, o primeiro turno pode ser feito, como a primeira estação 1, a segunda estação '10', e a segunda estação é retornada no sistema decimal)
/*** Crie* @param i* @param stationNum* @return*/public static string buidticket (int i, int stationnum) {biginteger temp = new biginteger ("0"); para (int j = i; j <stationNum; j ++) {temp = temp.or (»bigintet (buidtk temp.shiftright (1) .ToString ();}1.3 O procedimento principal para reservar ingressos, apenas um ingresso é reservado de cada vez (a = a | b)
/*** Obtenha o número de trem correspondente de acordo com as condições do filtro* @param ticketStr* @param ticketlist* @param condição* @return*/public static order CreateOrderByCondition (string ticketStr, list <ticket> ticketlist, mapa) {order temperder = null; para (ticket: bicketlist) {bigicTergerIntIntInTIntInTINTENTENTEINTENTETENTETETETETETETER = NULL; para (tickets: bicketterTerTerTerTer) Biginteger (ticket.getticketflag ()); // Se você puder reservar ingressos, deduzirá o inventário por um longo tempo && // (ticket.getsalechannel () == (ticket.getsalechannel () | 1)) se (canticket (do ticket,, toticket) && ticket.gettickettype (). Equals (condicion.get ("tickettype"). Order (); temporder.setorderid (uuid.randomuuid (). Tostring ()); temporder.setseattype (ticket.gettickettype ()); temporder.setketflag (toticket.tostring ()); temaord.setTrainno (ticketfLAnnNOnNOnNOnnOnnOnnOnno er.setFromdate (ticket.getfromdate ()); temperder.SetSalechannel (ticket.getsalechannel ()); temporder.setticketguid (ticket.getguid ()); ticket.setTicketFlag (fromticket.or (titicket) .ToString ());1.4 Para determinar se deve carimbar, a = ~ (~ a | b)
/*** Determine se você pode reservar ingressos ** @param fromticket* @param toticket* @return*/private estático boolean canticket (biginteger de ticket, biginteger toticket) {retorna de ticket.equals (de ticket.not (). Ou (toTicket) .not ());2. Entidade de pedido (retém as informações de ordem necessárias)
pacote com.Train.Ticket;/*** Entidade de pedido*@author guo_zhifeng **/public classe Order {private string orderid; private string ticketguid; // bill idprivate string ticketflag; // compra de string private string string string string string; // time de assento de string privada de string; ///////////tic compra string string string string; OrderId;} public void SetOrderId (String OrderId) {this.orderid = OrderId;} public String getTicketGuid () {return ticketguid;} public void SetticketGuid (String Ticketguid) {ticketflag; {this.Ticketflag = ticketflag;} public string getSeattype () {return SeatType;} public void setSeatType (string seattype) {this.SeatType = seattype;} public string getFromdate () {return fromdate;} public) 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. Entidade de bilheteria (retém as informações de emissão de bilhetes necessárias)
pacote com.Train.Ticket;/*** Entidade de ingressos*@author guo_zhifeng **/public classe ticket {private string ticketflag; private string tickettype; private int salechannel; string private string; getTrainno () {return TrainNo;} public void setTrainno (String Trainno) {this.Trainno = trensno;} public String getTicketflag () {return ticketflag;} public void Setticketflag (stringflag) {this.TicketFlag; SetticketType (String ticketType) {this.TicketType = ticketType;} public int getSalechannel () {return salechannel;} public void Setsalechannel (int Salechannel) {this.salechannel = Salechannel;} public string getFrdate () {ReturndArtDArt Drackr de Return; {this.Fromdate = Fromdate;}}4. Informações de inicialização do trem (apenas informações principais)
pacote com.Train.Ticket; importar java.util.map;/*** Informações sobre um trem*@author guo_zhifeng **/public classe trem {private string tremno; // número de trem private int stationNum; // número de estações private mapa <string, integger> seatTotalnum; // número de várias seres privadas void setFromdate (string fromDate) {this.fromdate = Fromdate;} public string getTrainno () {return TrainNo;} public void setTrainno (String Trainno) {this.TrainNo = TRAIRNO;} public na getStationNum () {retornnum; stationNum;} mapa público <string, número inteiro> getSeAtTotalnum () {return SeatTotalNum;} public void setSeatTotalNum (map <string, integger> SeatTotalNum) {this.SeatTotalnum = SeatTotalnum;}}} 5. Programa principal
5.1 Inicialize um vagão de trem
5.2 De acordo com a forma de compra de ingressos no local, a maximização é AB BC CD de EF, etc.
5.3 Saída demorada
pacote com.Train.Main; importar java.io.file; importar java.math.bigdecimal; importar java.math.biginteger; importar java.util.ArrayList; import java.util.util.hashmap; import java.util.list; com.Train.Ticket.Ticket; importar com.Train.Ticket.Train; importar com.Train.util.commonutil; public class MaintSt {public static void main (string [] args) {tren); = novo hashmap <string, número inteiro> (); setemap.put ("assento comercial",); seatmap.put ("primeira classe",); sedeMap.put ("Second Class",); trens.SetSeatTotalNum (Seatmap); // gerar system.out.println ("Inicialize os ingressos no trem"); Commonutil.initticketlist (trem); string filename = "d: //result.txt"; arquivo f = novo arquivo (nome do arquivo); if (f.Exists ()) f.Delete (); long starttime = System.currenttimemillis (); // int i =; // for (ticket ticket: ticketlist) {// Commonutil.appendMethoda (nome do arquivo, // i + "||" + Commonutil.tojson (ticket) + "/n", true); // i ++; //} system.out.Int.Int.Intn ("/n", "// i ++; //} system.out.out.Int.Intn ("/n ", true); long begIntime = System.CurrentTimEmillis (); List <Order> OrderResult = new ArrayList <Order> (); para (int j =; j <treinamento.getStationNum () -; j ++) {string ticketStr = CommonUtil.buidTicket (j); // string ticketTr = CommonUtil.buidTicket (ticketList.GetStationNum ()); trem); OrderResult.addall (TemplistOrder);} Long Endtime = System.CurrentTimemillis (); System.out.println ("Reserva concluída"); // int m =; // para (Ticket Ticket: Ticketlist) {// string temp = m + "||" + Commonutil.Tojson (Ticket) + ","; // // System.out.println (temp); // Commonutil.appendMethoda (nome do arquivo, temp, true); // m ++; //} // int k =; // para (ordem de ordem: ordem) {// string temp =.GerdImid (}Prome. + order.getsalechannel () // + "||" + order.getfromdate () // + "||" + order.getSeatType () // + "||" + order.getticketguid () // + "||" + order.gettrainno () // + "||" + order.getticketflag () // + "||" + novo biginteger (order.getticketflag ()). tostring () // + "||" + k; // Commonutil.appendMethoda (nome do arquivo, temp, true); // k ++; //} eedtime = system.currenttimemillis (); system.out.println ("gene ordem" + orderResult.size () + "| "MillisEconds"); System.out.println ("Gere número de documentos por segundo (ordem por bilhete)" + novo BigDecimal (OrderResult.size ()). Multiply (new BigDecimal (). Concluído ");}}6. Resultados da operação
O exposto acima é o algoritmo de tickets 12306 do código Java, apresentado a você pelo editor (II). Espero que seja útil para todos!