Je n'avais rien à faire vendredi. Sur la base de l'article précédent sur l'analyse de la théorie de l'algorithme de billetterie 12306 (version Java), j'ai mené Java Coding Practice pour les lecteurs pour se référer (ce qui suit est une description simple du code pertinent)
1. Outils de réservation de billets
1.1 Initialiser les informations sur les billets d'une voiture de train
/ *** générer des informations sur les billets ** @param Train * @ return * / public static list <Iclure> initticketList (Train Train) {list <ticket> result = new ArrayList <Icket> (); map <string, entier> SeatMap = Train.getSetTotalNum ()) pour (entrée <String, Integer> Entry. TicketType = Entry.getKey (); pour (int i = 0; i <billetsize; i ++) {int selechannel = (int) (math.random () * 10)% 8; ticket billet = new Ticket (); Ticket.SetSaleChannel (Salechannel); Ticket.SetTticketType (TicketType); Ticket.SetGuid (UUID.RandomuUid (). ToString ()); Ticket.SetFromDate ( Train.getFromDate ()); Ticket.SetTicketflag (Commonutil.InTticketflag (Train)); Ticket.SetTrainno (Train.GetTrainno ()); result.add (Ticket);}} Return résultat;}1.2 Générer l'achat de billets de site (par exemple, le premier quart peut être effectué, comme la première station 1, la deuxième station «10» et la deuxième station est retournée dans le système décimal)
/ *** Create * @param i * @param StationNum * @ return * / public static String buidticket (int i, int stationnum) {bigInteger temp = new BigInteger ("0"); for (int j = i; j <stageNum; j ++) {temp = temp.or (new BigInteger (buidTicket (j)));} Retour temp.shiftright (1) .toString ();}1.3 La procédure principale de réservation de billets, un seul billet est réservé à la fois (a = a | b)
/ *** Obtenez le numéro de train correspondant en fonction des conditions du filtre * @param tickettr * @param ticketList * @param condition * @ return * / public static order createOrderByCondition (string billetstr, list <ticket> ticketList, map condition) {commander temporder = null; for (ticket ticket: biglinteg BigInteger (ticket.getTticketflag ()); // Si vous pouvez réserver des billets, vous déduquerez l'inventaire pendant longtemps && // (Ticket.getsaleChannel () == (Ticket.getsaleChannel () | 1)) if (calicket (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 (); er.setFromDate (ticket.getFromDate ()); temporder.setsaleChannel (Ticket.getsaleChannel ()); temporder.setticketGuid (Ticket.getGuid ()); Ticket.SetTicketflag (FromTicket.or (ToTticket) .toString ());}} retournemorder;};}.1.4 pour déterminer s'il faut tamponner, a = ~ (~ a | b)
/ *** Déterminez si vous pouvez réserver des billets ** @param fromTicket * @param toticket * @ return * / private static boolean calicket (bigInteger fromTicket, bigInteger tacticket) {return fromticket.equals (fromTicket.not (). Ou (toticket) .not ());}2. Entité de commande (conserver les informations de commande nécessaires)
Package com.train.ticket; / *** Order Entity * @author guo_zhifeng ** / public class Order {private String OrderId; private String TicketGuid; // SEAT Type private String FromDate; // Department Date String private String Trainno; // OrderId;} public void SetOrderId (String OrderId) {this.OrderId = OrderId;} public String getTicketGuid () {return TicketGuid;} public void settacletGuid (String TicketGuid) {this.ticketGuid = TicketGuid;} public string getTticketflag () {return ticketflag {this.ticketflag = ticketflag;} public String getSeType () {return seattype;} public void setSeatType (String setType) {this.seatType = seattype;} public String getFromDate () {return fromdate;} public Void setFromdate (String from ath getTtrainno () {return TrainNo;} public void SetTrainno (String Trainno) {this.trainno = Trainno;} public int getSalechannel () {return Salechannel;} public void setsalechannel (int Salechannel) {this.Salechannel = Salechannel;}}3. Entité de billetterie (conserver les informations de billetterie nécessaires)
Package com.train.ticket; / *** entité de billets * @author guo_zhifeng ** / classe publique Ticket {private String TicketFlag; private String TicketType; // Date de départ String public String GetGuid () {RETOUR GUID;} public VOID SetGuid (String Guid) {this.GUID = Guid;} Public String SetGuid (String Guid) {this.guid = Guid;} public Struc getTtrainno () {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 GetTticketType () {Retour Tickettype; SettticketType (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) From Ddat) {this.fromDate = frudDate;}}4. Informations sur l'initialisation des trains (seules informations principales)
Package com.train.ticket; Importer java.util.map; / *** Informations sur un train * @author guo_zhifeng ** / classe publique Train {String private Trainno; // Numéro de train privé int StationNum; // Nombre de stations Carte privée <String, INTERS> SeatTotalnum; // Nombre de places privées de la chaîne de privilège de Date; 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) StationNum;} Public Map <String, Integer> getSetAtTotalNum () {return SeatTotalNum;} public void setSeTtotalnum (map <String, Integer> SeatTotalnum) {this.seattotalnum = SeatTotalnum;}} 5. Programme principal
5.1 Initialiser une voiture de train
5.2 Selon la forme des achats de billets sur le site, la maximisation est AB BC CD de EF, etc.
5.3 Sortie chronophage
package com.train.main; import java.io.file; import java.math.bigdecimal; import java.math.biginteger; import java.util.arraylist; import java.util.hashmap; com.train.ticket.ticket; import com.train.ticket.train; import com.train.util.commonutil; classe publique maintente {public static void main (string [] args) {Train Train = new Train (); Train.settrainno ("SA"); Train.SetFromdate ("//"); SeatMap = new HashMap <String, Integer> (); SeatMap.put ("Business Seat",); SeatMap.put ("First Class",); SeatMap.put ("Second Class",); Train.setsEatTotalnum (SeatMap); // Generate Ticket System.out.Println ("Initialiser les billets dans le train"); liste Commonutil.initTticketList (Train); String filename = "d: //result.txt"; fichier f = new File (filename); if (f.exists ()) f.delete (); Long starttime = System.CurrentTimemillis (); // int i =; // for (Ticket Ticket: TicketList) {// Commonutil.ApendMethoda (FileName, // i + "||" + Commonutil.tojson (Ticket) + "/ N", TRUE); // i ++; //} system.out.println ("Start Booking"); long begintime = System.currentTimemillis (); list <ordre> orderResult = new ArrayList <Order> (); pour (int j =; j <train Train); OrderResult.Addall (TemplistOrder);} Long Bendtime = System.CurrentTimemillis (); System.out.println ("Réservation terminée"); // int m =; // pour (Ticket Ticket: TicketList) {// String Temp = M + "||" + Commonutil.tojson (ticket) + ","; // // system.out.println (temp); // Commonutil.ApendMethoda (nom de fichier, temp, true); // m ++; //} // int k =; // pour (ordre de l'ordre: ordonnance " + order.getsalechannel () // + "||" + order.getFromDate () // + "||" + order.getSeatType () // + "||" + order.getTicketGuid () // + "||" + order.gettrainno () // + "||" + order.getTticketflag () // + "||" + new BigInteger (order.GetTticketflag ()). toString () // + "||" + k; // Commonutil.ApendMethoda (nom de fichier, temp, true); // k ++; //} long eedtime = System.currenttimemillis (); System.out.println ("Generate Order" + OrderResult.Size () + "|| Time-conming Temps:" + (fin - Begintime) + "milliseconds"); Nombre de documents par seconde (Order by Ticket) "+ New Bigdecimal (OrderResult.size ()). Multiply (New Bigdecimal ()). Divide (new BigDecimal (Fintime - Begintime) ,, Bigdecimal.round_half_down)); System.out.Println (" Exécution terminée ");}}6. Résultats de l'opération
Ce qui précède est l'algorithme de billetterie Java Code Practice 12306 qui vous est présenté par l'éditeur (II). J'espère que ce sera utile à tous!