Ich hatte am Freitag nichts zu tun. Basierend auf dem vorherigen Artikel über die Analyse der Ticketing -Algorithmus -Theorie von 12306 (Java -Version) habe ich die Java -Codierungspraxis durchgeführt, auf die die Leser verweisen können (Folgendes ist eine einfache Beschreibung des entsprechenden Code)
1. Ticketbuchungswerkzeuge
1.1 Initialisieren Sie die Ticketinformationen eines Zugautos
/*** Ticketinformationen generieren ** @param train* @return*/public static list <ticket> Intitticketlist (Zug Train) {List <Ticket> result = new ArrayList <ticket> (); Karte <String, Integer> SEATMAP = Train.getSeattotAlnum (); für (Eintrag <string <Starns, integel. TicketType = Eintrag.getKey (); für (int i = 0; i <TicketSize; i ++) {int salechannel = (int) (math.random () * 10) % 8; Ticket Ticket = neu Ticket (); Ticket. Train.getFromDate ()); Ticket.Setticketflag (CommonUtil.initticketFlag (Train)); Ticket.SetTrainno (Train.GetTrainno ()); Ergebnis.Add (Ticket);}} return Ergebnis;}1.2 Kauf von Site Ticket generieren (z. B. kann die erste Schicht durchgeführt werden, wie die erste Station 1, die zweite Station '10', und die zweite Station wird im Dezimalsystem zurückgegeben)
/*** create* @param i* @param stationnum* @return*/public static String buidticket (int i, int stationnum) {BigInteger temp = new BigInteger ("0"); für (int j = i; j <stationnum; j ++) {temp = temp.or (New Biginte (new Biginte temp.shiftright (1) .toString ();}1.3 Das Hauptverfahren für die Buchung von Tickets, nur ein Ticket ist gleichzeitig gebucht (a = a | b)
/*** Erhalten Sie die entsprechende Zugnummer gemäß den Filterbedingungen* @param TicketStr* @param Ticketliste* @param Zustand* @return*/public static order createderByCondition (String TicketSTR, List <Ticket> Ticketliste, Map -Zustand) {Order Temporler = Null; für (Ticket: Ticketliste) {BiginteGet -Toticket = new Biginteger (tickinteger). BigInteger (Ticket.Getticketflag ()); // Wenn Sie Tickets buchen können, werden Sie die Inventar für lange Zeit && // (Ticket.getSalechannel () == (Ticket.getSalechel () | 1)) if (Kanticket (From -Ticket, Toticket) && Ticket.GettTickettType (). Equals (Condition.get ("TicketType"). ToString ()) // && (Ticket.getSalechannel () == (Ticket.getSalechel () | 2)) {Temporler = New Order (); Temporale er.setfromdate (Ticket.getfromdate ()); Tempor hieres.1.4 Um festzustellen, ob man stempeln soll, a = ~ (~ a | b)
/*** Bestimmen Sie, ob Sie Tickets buchen können
2. Bestellentität (behalten Sie die erforderlichen Auftragsinformationen bei)
Paket com.train.ticket;/*** Bestellung Entität*@Author Guo_zifeng **/öffentliche Klasse Order {private String orderId; private String TicketGuid; // Bill Idprivate String Ticketflag; // Kaufmarke private String SeattryPe; // Sitztyp privat String Fromdate; // Ausgangsdatum private staith -staith -staitel -staith -salader -stader -staith -stader -staith -salchno; // Training -ZUTRECKNOS. orderId;} public void setOrderId (String orderId) {this.orderId = orderId;} public String GetticketGuid () {return ticketGuid;} public void setticketguid (String Ticketguid) {this.ticketguid = Ticketguid;} öffentliche String -Geticketflag () {return ticketflag) {this.ticketflag = Ticketflag;} public String GeteTtype () {return SeatType;} public void setSeAtType (String SeatType) {this.seattype = seattype;} public String GetFromdate () {return fromdate; getTrainno () {return trainno;} public void setTrainno (String trainno) {this.trainno = trainno;} public int getSalechannel () {return salechannel;} public void setSalechel (intalechannel) {this.salechannel = salechannel;}}}}}}}}}}}}}}}}3.. Ticketing -Unternehmen (behalten Sie die erforderlichen Ticketinformationen auf)
Paket com.train.ticket;/*** Ticket Entity*@Author Guo_zifeng **/public class Ticket {private String Ticketflag; GetTrainno () {return trainno;} public void setTrainno (String trainno) {this.trainno = trainno;} public String GetticketFlag () {return ticketflag;} public void setticketflag (String ticketflag) {ticketFlag = Ticketflag;} public stingTtttticke () {{{Ticketflag;}} Sting -Sting -StingTieTtype () {) {{{}}} Sting -Sting -StingTieTtype () {{{{}}} Sting -Sting -StingTieTtype; 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. Trainerinitialisierungsinformationen (nur Hauptinformationen)
Paket com.train.ticket; import java.util.map;/*** Informationen über einen Zug*@author Guo_zifeng **/public class Train {private String trainno; // Trainieren Sie private int stationnum; // Anzahl der privaten Karte, innehme, integer> sesstotalnum; // numme von verschiedenen Sitzen von verschiedenen Sitzen von verschiedenen Sitzen aus der Sitze von verschiedenen Sitzen aus der Sitze aus der Sitze von Sitzen aus der Sitze aus der Förderung der Sitze aus der Förderung der Sitze aus der Förderung der Sitze aus der Förderung der Sitze aus der Förderung. void setFromDate (String fromDate) {this.fromdate = fromdate;} public String getTrainno () {return trainno;} public void settrainno (String trainno) {this.trainno = trainno;} public intstationNum () {returnnum. stationnum;} public map <String, Integer> GetEattotalnum () {return seusedTotalnum;} public void setSeatTotalnum (Karte <String, Integer> Seattotalnum) {this.seattotalnum = sesstotalnum;}}}}}}}}}}}}}}} 5. Hauptprogramm
5.1 Ein Zugauto initialisieren
5.2 Gemäß der Form der Ticketkäufe vor Ort ist die Maximierung AB BC CD DE EF usw.
5.3 zeitaufwändige Ausgabe
Paket 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; com.train.ticket.ticket; import com.train.ticket.train; import com.train.util.commonutil; public class Achtung {public static void main (String [] args) {Train -Train = neuer Zug (); Train.settrainno ("sa"); = new Hashmap <String, Integer> (); seatmap.put ("Business Seat",); SeatMap.put ("First Class",); SeatMap.put ("zweite Klasse", train. fileName = "d: //result.txt"; Datei f = Neue Datei (Dateiname); if (f.exists ()) f.delete (); Long start time = system.currentTimemillis (); // int i =; // für (Ticket Ticket: Ticketliste) {// CommonUtil.AppendMethoda (Dateiname, // i + "||" + CommonUtil.tojson (Ticket) + "/n", true); // i ++; //} system.out.out.Println (Start buchen ". Long begintime = system.currentTimemillis (); list <order> orderResult = new ArrayList <Heorte> (); für (int j =; j <train.getStationNum () -; j ++) {String ticketStr = CommonUtil.buidticket (j); // String ticketstr = CommonUtil.buidticket (, Train.getStationNum ()); Zug); orderResult.addall (Templistorder);} Long EndTime = System.currentTimemillis (); System.out.println ("Reservierung abgeschlossen"); // int m =; // für (Ticket Ticket: Ticketliste) {// String temp = m + "||" + CommonUtil.tojson (Ticket) + ","; // // system.out.println (temp); // CommonUtil.AppendMethoda (Dateiname, Temp, true); // m ++; //} // int k =; // für (orderResult) order. // String temp = order.getorder.getorder.getorder () // // // // // | + order.getSalechannel () // + "||" + order.getfromdate () // + "||" + order.getSeType () // + "||" + order.gettIndiTGuid () // + "||" + order.getTrainno () // + "||" + order.getticketflag () // + "||" + neuer BigInenger (order.gettInticketflag ()). toString () // + "||" + k; // Commonutil.AppendMethoda (Dateiname, temp, true); // k ++; //} long eedtime = system.currenttimemillis (); System.out.println ("Order" + orderResult.size () + "| "Milliseconds"); System.out.println ("Anzahl der Dokumente pro Sekunde generieren (Order by Ticket)" + new BigDecimal (OrderResult.SIZE (). Vollendet");}}6. Betriebsergebnisse
Das obige ist der vom Herausgeber vorgestellte Java -Code -Praxis 12306 -Ticket -Algorithmus. Ich hoffe, es wird für alle hilfreich sein!