ฉันไม่มีอะไรทำในวันศุกร์ จากบทความก่อนหน้าเกี่ยวกับการวิเคราะห์ทฤษฎีอัลกอริทึมการจองตั๋ว 12306 (เวอร์ชัน Java) ฉันได้ทำการฝึกการเข้ารหัส Java เพื่อให้ผู้อ่านอ้างถึง (ต่อไปนี้เป็นคำอธิบายง่ายๆของรหัสที่เกี่ยวข้อง)
1. เครื่องมือจองตั๋ว
1.1 เริ่มต้นข้อมูลตั๋วของรถรถไฟ
/*** สร้างข้อมูลตั๋ว ** @param Train* @return*/รายการคงที่สาธารณะ <Ticke> InitticketList (รถไฟรถไฟ) {รายการ <Ticke> ผลลัพธ์ = new ArrayList <Ticke> (); แผนที่ <String, Integer> seatmap = train.getSeatToTAtAlnum () TicketType = entry.getKey (); สำหรับ (int i = 0; i <ticketsize; 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 (รถไฟ)); ticket.setTrainno (train.getTrainno ()); result.add (ตั๋ว);}} กลับมา ผลลัพธ์;}1.2 สร้างการซื้อตั๋วไซต์ (ตัวอย่างเช่นกะครั้งแรกสามารถทำได้เช่นสถานีแรก 1 สถานีที่สอง '10' และสถานีที่สองจะถูกส่งกลับในระบบทศนิยม)
/*** สร้าง* @param i* @param stationnum* @return*/สตริงคงที่สาธารณะ buidticket (int i, int stationnum) {biginteger temp = ใหม่ biginteger ("0"); สำหรับ (int j = i; j <stationnum; j ++) {temp = temp.or temp.shiftright (1) .tostring ();}1.3 ขั้นตอนหลักสำหรับการจองตั๋วมีตั๋วเพียงใบเดียวเท่านั้นที่จองในแต่ละครั้ง (a = a | b)
/*** รับหมายเลขรถไฟที่สอดคล้องกันตามเงื่อนไขตัวกรอง* @param ticketstr* @param TicketList* @param เงื่อนไข* @return*/คำสั่งซื้อแบบคงที่สาธารณะ createOrderByCondition (สตริง ticketstr, รายการ <Ticke> TicketList, แผนที่ BigInteger (ticket.getTicketFlag ()); // ถ้าคุณสามารถจองตั๋วได้คุณจะหักสินค้าคงคลังเป็นเวลานาน && // (ticket.getSaleChannel () == (ticket.getSaleChannel () | 1)) ถ้า (Canticket (FromTicket toticket) && ticket.getTicketType (). equals (เงื่อนไข ("ticketType"). toString ()) // && (ticket.getSaleChannel () == (ticket.getSaleChannel () | 2))) order (); tempormer.setOrderId (uuid.randomuuid (). toString ()); tempormer.setseattype (ticket.getTicketType ()); temporder.setticketflag (toticket.toString ()); temporder.settrainno Er.setFromdate (Ticket.getFromdate ()); tempormer.setsalechannel (ticket.getsalechannel ()); temporm.setticketGuid (ticket.getGuid ()); ticket.setticketflag (fromticket.or (toticket). tostring ()1.4 เพื่อตรวจสอบว่าจะประทับตรา A = ~ (~ A | B)
/*** ตรวจสอบว่าคุณสามารถจองตั๋ว ** @param fromticket* @param toticket* @return*/boolean แบบคงที่ส่วนตัว (Biginteger fromticket, biginteger toticket) {return fromticket.equals (fromticket.not () หรือ (toticket).2. เอนทิตีคำสั่งซื้อ (เก็บข้อมูลคำสั่งซื้อที่จำเป็น)
แพ็คเกจ com.train.ticket;/*** order entity*@author guo_zhifeng **/คำสั่งระดับสาธารณะ {สตริงส่วนตัว orderid; สตริงส่วนตัว ticketguid; // บิล idprivate สตริงสตริง ticketflag; // ทำเครื่องหมายสตริงส่วนตัว seattype; orderId;} โมฆะสาธารณะ setOrderId (String orderId) {this.orderId = orderId;} สตริงสาธารณะ getTicketGuid () {return ticketGuid;} โมฆะสาธารณะ setticketGuid (สตริง ticketGuid) {this.ticketguid = ticketguid; {this.ticketFlag = TicketFlag;} Public String GetSeatType () {return seattype;} โมฆะสาธารณะ setSeatType (สตริง seattype) {this.SeatType = seatType;} สตริงสาธารณะ getFromdate () {return fromDate; getTrainno () {return trainno;} โมฆะสาธารณะ settrainno (String trainno) {this.trainno = trainno;} สาธารณะ int getSalechannel () {return salechannel;} void สาธารณะ setsalechannel (int salechannel) {this.salechannel;3. เอนทิตีการจองตั๋ว (เก็บข้อมูลการจองตั๋วที่จำเป็น)
แพ็คเกจ com.train.ticket;/*** Ticket Entity*@author guo_zhifeng **/ตั๋วชั้นเรียนสาธารณะ {สตริงส่วนตัว Ticketflag; สตริงส่วนตัว TicketType; INT ส่วนตัว salechannel; สตริงส่วนตัว trainno; สตริงส่วนตัว getTrainno () {return trainno;} โมฆะสาธารณะ setTrainno (String trainno) {this.trainno = trainno;} public String getTicketFlag () {กลับตั๋ว TicketFlag; SetticketType (String TicketType) {this.ticketType = TicketType;} int สาธารณะ int getSalechannel () {return salechannel;} โมฆะสาธารณะ setsalechannel (int salechannel) {this.salechannel = salechannel; {this.fromdate = fromdate;}}4. ข้อมูลการเริ่มต้นฝึกอบรม (เฉพาะข้อมูลหลัก)
แพ็คเกจ com.train.ticket; นำเข้า java.util.map;/*** ข้อมูลเกี่ยวกับรถไฟ*@author guo_zhifeng **/รถไฟระดับสาธารณะ {รถไฟสายส่วนตัวรถไฟ; // หมายเลขรถไฟ int Stationnum; // จำนวนสถานีส่วนตัว Void setFromdate (String fromdate) {this.fromdate = fromdate;} public String getTrainno () {return trainno;} โมฆะสาธารณะ setTrainno (String trainno) {this.trainno = trainno; stationnum;} แผนที่สาธารณะ <สตริง, จำนวนเต็ม> getSeattotalnum () {ส่งคืน seattotalnum;} โมฆะสาธารณะ setseattotalnum (แผนที่ <สตริง, จำนวนเต็ม> seattotalnum) {this.seattotalnum = seatototalnum;}}}}}}}} 5. โปรแกรมหลัก
5.1 เริ่มต้นรถรถไฟ
5.2 ตามรูปแบบของการซื้อตั๋วในสถานที่การขยายสูงสุดคือ AB BC CD DE EF ฯลฯ
5.3 เอาต์พุตใช้เวลานาน
แพ็คเกจ com.train.main; นำเข้า java.io.file; นำเข้า java.math.bigdecimal; นำเข้า java.math.biginteger; นำเข้า java.util.arraylist; นำเข้า java.util.hashmap; นำเข้า java.util.list; com.train.ticket.ticket; นำเข้า com.train.ticket.train; นำเข้า com.train.util.commonutil; ชั้นเรียนสาธารณะบำรุงรักษา {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {รถไฟรถไฟ = รถไฟขบวนใหม่ = new hashmap <string, integer> (); seatmap.put ("ที่นั่งธุรกิจ",); seatmap.put ("ชั้นหนึ่ง",); seatmap.put ("ชั้นสอง",); train.setettotalnum (seatmap); Commonutil.initticketList (รถไฟ); String filename = "D: //result.txt"; ไฟล์ f = ไฟล์ใหม่ (ชื่อไฟล์); ถ้า (f.exists ()) f.delete (); Long StartTime = System.currentTimeMillis (); // int i =; // สำหรับ (ตั๋วตั๋ว: TicketList) {// Commonutil.appendMethoda (ชื่อไฟล์, // i + "||" + Commonutil.tojson (ตั๋ว) + "/n" Long Begintime = System.currentTimeMillis (); รายการ <order> orderResult = new ArrayList <ORDER> (); สำหรับ (int j =; j <train.getStationNum () -; j ++) {String ticketstr = Commonutil.buidTicket (j); // String Ticketstr = Commonutil.buidTicket (, Train.getStationNum ()); Train); orderResult.addall (templistorder);} endtime long long = system.currentTimeMillis (); system.out.println ("การจองเสร็จสมบูรณ์"); // int m =; // สำหรับ (ตั๋วตั๋ว: TicketList) {// String Temp = M + "||" + Commonutil.tojson (ตั๋ว) + ","; // // system.out.println (temp); // Commonutil.appendmethoda (ชื่อไฟล์, temp, true); // m ++; //} // int k =; // สำหรับ (คำสั่งซื้อ: orderresult) + order.getSaleChannel () // + "||" + order.getFromdate () // + "||" + order.getSeatType () // + "||" + order.getTicketGuid () // + "||" + order.getTrainno () // + "||" + order.getTicketFlag () // + "||" + ใหม่ BigInteger (order.getTicketFlag ()). TOSTRING () // + "||" + k; // Commonutil.AppendMethoda (ชื่อไฟล์, อุณหภูมิ, true); // k ++; //} ยาว eedtime = system.currentTimeMillis (); system.out.println ("สร้างลำดับ" + orderresult.size () + "| | "Milliseconds"); System.out.println ("สร้างจำนวนเอกสารต่อวินาที (สั่งซื้อโดยตั๋ว)" + ใหม่ bigdecimal (orderresult.size ()). ทวีคูณ (ใหม่ bigdecimal () divide (ใหม่); สมบูรณ์");}}6. ผลการดำเนินงาน
ข้างต้นคือการฝึกรหัส Java 12306 อัลกอริทึมการออกตั๋วที่แนะนำโดยบรรณาธิการ (II) ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน!