Saya tidak ada hubungannya pada hari Jumat. Berdasarkan artikel sebelumnya tentang analisis teori algoritma tiket 12306 (versi java), saya melakukan praktik pengkodean java untuk dirujuk oleh pembaca (berikut ini adalah deskripsi sederhana dari kode yang relevan)
1. Alat Pemesanan Tiket
1.1 Inisialisasi informasi tiket mobil kereta
/*** Generate Ticket information** @param train* @return*/public static List<Ticket> initTicketList(Train train) {List<Ticket> result = new ArrayList<Ticket>();Map<String, Integer> seatMap = train.getSeatTotalNum();for (Entry<String, Integer> entry : seatMap.entrySet()) {int ticketSize = entry.getValue();String ticketType = entry.getKey (); for (int i = 0; i <tiketSize; i ++) {int salechannel = (int) (math.random () * 10) % 8; tiket tiket = baru Ticket (); Ticket.setsalechannel (Salechannel); Ticket.setticketType (TicketType); Ticket.setGuid (uuid.randomuuid (). ToString ()); Ticket.setFromDate ( train.getFromDate ()); ticket.setticketflag (commonutil.initticketflag (kereta)); ticket.settrainno (train.gettrainno ()); result.add (tiket);}} return hasil;}1.2 Hasilkan Pembelian Tiket Situs (misalnya, shift pertama dapat dilakukan, seperti stasiun pertama 1, stasiun kedua '10', dan stasiun kedua dikembalikan dalam sistem desimal)
/*** Buat* @param i* @param stationnum* @return*/public static string buidticket (int i, int stationnum) {biginteger temp = baru biginteger ("0"); for (int j = i; j <stationnum; j ++) {temp = temp.or (biginteger baru (BuDTicket; j ++) {Temp = Temp.or (baru BigIninteger (BuDTICHET; temp.shiftright (1) .toString ();}1.3 Prosedur utama untuk pemesanan tiket, hanya satu tiket yang dipesan pada satu waktu (a = a | b)
/*** Dapatkan nomor kereta yang sesuai sesuai dengan kondisi filter* @param ticketstr* @param ticketlist* @param condition* @return*/public static order createDerByCondition (string ticketstr, list <icete> ticketlist, peta kondisi) {order temporder = null; untuk tiket: tiket: tiket) {biginteger toticker = null; Tiket Ticket: Tickete) {BigInteger Toticker = null; Tiket Ticket) BigInteger (Ticket.getTicketFlag ()); // Jika Anda dapat memesan tiket, maka Anda akan mengurangi inventaris untuk waktu yang lama && // (Ticket.getSalechannel () == (Ticket.getSalechannel () | 1)) if (canticket (fromticket, TOTICKET) && ticket.getticketType (). Equals (condition.get ("tickeType"). ToString ()) // && (Ticket.GetSaleChannel () == (Ticket.getSalechannel () | 2))) {Temporder = baru Order (); temporder.setorderId (uuid.randomuuid (). Tostring ()); temporder.setseatType (ticket.getticketype ()); temporder.seticketflag (toticket.tostring ()); Temporder.settrainno (tickrainno.tostring ()); Temporder.setrainno (tickrainno.tostring ()); Temporder.setrainno (tickrainno.tostring ()); er.setFromDate (ticket.getFromDate ()); temporder.setsalechannel (ticket.getSaleChannel ()); temporder.setticketguid (ticket.getguid ()); ticket.setticketflag (fromTicket.or (toticket) .toString (); break; break;}}}}}.1.4 untuk menentukan apakah akan cap, a = ~ (~ a | b)
/*** Tentukan apakah Anda dapat memesan tiket ** @param fromticket* @param toticket* @return*/private static boolean canticket (biginteger fromticket, biginteger tubIcket) {return fromticket.equals (fromticket.not (). Or (tubute) .not ();};};2. Entitas Pesanan (Simpan Informasi Pesanan yang Diperlukan)
Paket com.train.ticket;/*** entitas pesanan*@author guo_zhifeng **/pesanan kelas publik {private string orderId; private string ticketguid; // bill iDprivate string ticketflag; // mark pembelian swasta string seattype; // seat type string private fromDate; // date date date string private string trainno;//nomor lintasan lintasan swerter {leynel/leftring {number salechel {) public saler//date date date string string private string trainno;//train number train train swaster firgents private fromDate;/DEGEFTURE TANGGAL PRIVATE string trainno;//Nomor lintangan kereta lintasan Train train swoord; orderId;} public void setOrderId (String orderId) {this.orderId = orderId;} public String getTicketGuID () {return ticketguid;} public void seticketguid (string ticketguid) {this.ticketguid = ticketguid;} public string getTickEtFlag () {return tickelfuid = ticketguid; {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.eRePer;} public void setfromDate (string fromdate) {this.eRETEDate;} public void setfromDate (string fromdate) {this.eRETEDate; {return trainno;} public void settrainno (string trainno) {this.trainno = trainno;} public int getSalechannel () {return salechannel;} public void setSalechannel (int salechannel) {this.salechannel = salechannel;}}3. Entitas Tiket (Simpan Informasi Tiket yang Diperlukan)
Paket com.train.ticket;/*** entitas tiket*@author guo_zhifeng **/tiket kelas publik {private string ticketflag; private string ticketType; private int salechannel; private string trainno; private string guid; string private fromDate; // date date public getGuid () {return guid;} public void public void; gettrainno () {return trainno;} public void settrainno (string trainno) {this.trainno = trainno;} public string getTicketFlag () {return ticketflag;} public void publicflag (string ticketflag) {this.ticketflag;} public publicflag (string ticketflag) {this.ticketflag; oCrickEplag; ticketplag; ticketplag (string ticketflag (this setticketType (string ticketType) {this.ticketType = ticketType;} public int getSaleChannel () {return salechannel;} public void setSaleChannel (int salechannel) {this.salechannel = SaleChannel;} string public getFromDate () {return fromdate; FromDate;}}4. Latih informasi inisialisasi (hanya informasi utama)
package com.train.ticket;import java.util.Map;/*** Information about a train* @author guo_zhifeng**/public class Train {private String trainNo;// Train number private int stationNum;// Number of stations private Map<String, Integer> seatTotalNum;// Number of various seats 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;} peta publik <string, integer> getSeattotalNum () {return seattotalNum;} public void setSeatTotalNum (peta <string, integer> seattotalNum) {this.seattotalnum = seattotalNum;}} 5. Program Utama
5.1 Inisialisasi mobil kereta
5.2 Menurut bentuk pembelian tiket di lokasi, maksimalisasi adalah AB BC CD de EF, dll.
5.3 Output yang memakan waktu
Paket com.train.main; impor java.io.file; impor java.math.bigdecimal; import java.math.biginteger; import java.util.arraylist; import java.util.hashmap; import java.util.list; import java.util.hashmap; com.train.ticket.ticket; import com.train.ticket.train; import com.train.util.commonutil; kelas publik Maintest {public static void main (string [] args) {train train = new train (); train.setrainno ("SA"); train.setFromdate ("////trainset; = HashMap baru <String, Integer> (); seatmap.put ("Business Seat",); seatmap.put ("Kelas Pertama",); seatmap.put ("Kelas Kedua",); train.setseattotalnum (seatMap); // menghasilkan ticket system.out.println ("initialize tiket di kereta"); Commonutil.initticketlist (kereta); string filename = "d: //result.txt"; file f = file baru (nama file); if (f.exists ()) f.delete (); Long starttime = system.currentTimeMillis (); // int i =; // for (tiket tiket: ticketlist) {// commonutil.appendmethoda (fileName, // i + "||" + commonil.toJson (tiket) + "/n", true); // i ++; //} Sistem. " long beginTime = system.currentTimeMillis (); Daftar <dertion> orderResult = new ArrayList <FORTE> (); untuk (int j =; j <train.getStationNum () -; j ++) {string ticketstr = commonutil.buidticket (j); // string ticketstr = commonutil.buidticket (, train.getStationNum ()) ;; // system.exit (); Daftar <order> templistorder = commonuM (); kereta); orderResult.addall (Templistorder);} panjang akhir waktu = System.currentTimeMillis (); System.out.println ("Reservasi Selesai"); // int m =; // untuk (tiket tiket: Ticketlist) {// string temp = m + "||" + Commonil.toJson (Tiket) + ","; // // System.out.println (temp); // commonutil.appendmethoda (fileName, temp, true); // m ++; //} // int k =; // untuk (pesanan: orderResult) {// string temp = order.get. + order.getSaleChannel () // + "||" + order.getFromDate () // + "||" + order.getSeatType () // + "||" + order.getticketguid () // + "||" + order.gettrainno () // + "||" + order.getticketflag () // + "||" + BigInteger baru (order.getticketflag ()). ToString () // + "||" + k; // commonutil.appendMethoda (nama file, temp, true); // k ++; //} long eedtime = system.currentTimeMillis (); System.out.println ("Hasilkan pesanan" + ordResult.size () + "|| waktu pengambilan waktu:" + (end - end -end -neKICE () + "|| waktu pengambilan waktu:" + (end -detak -end -end -neKULT.Size) + " "milliseconds");System.out.println("Generate number of documents per second (order by ticket)" + new BigDecimal(orderResult.size()).multiply(new BigDecimal()).divide(new BigDecimal(endTime - beginTime),,BigDecimal.ROUND_HALF_DOWN));System.out.println("Execution Selesai ");}}6. Hasil Operasi
Di atas adalah Algoritma Tiket Praktik Java 12306 yang diperkenalkan kepada Anda oleh editor (II). Saya harap ini akan membantu semua orang!