私は金曜日に何もすることがありませんでした。 12306チケットアルゴリズム(Javaバージョン)理論の分析に関する前の記事に基づいて、読者が参照するためにJavaコーディングプラクティスを実施しました(以下は関連するコードの簡単な説明です)
1。チケット予約ツール
1.1電車のチケット情報を初期化します
/***チケット情報を生成** @param Train* @return*/public static list <ticket> initticketlist(Train){list <technist> result = new arraylist <ticket>(); map <string、integer> seatmap = train.getSotalnum(); ticketType = entry.getKey(); ticket(); Ticket.SetsaleChannel(SaleChannel); Ticket.SetticketType(TicketType); Ticket.setGuid(uuid.randomuid()。toString()); ticke.setfromdate( train.getFromDate()); Ticket.SetticketFlag(commonutil.initticketflag(Train)); Ticket.setTrainno(train.getTrainno()); result.Add(Ticket);}} return 結果;}1.2サイトチケットの購入を生成します(たとえば、最初のステーション1、2番目のステーション '10'など、最初のシフトを実行できます。
/*** create* @param i* @param stationnum* @return*/public static string buidticket(int i、int stationnum){biginteger temp = new biginteger( "0"); temp.shiftright(1).toString();}1.3チケットの予約の主な手順では、一度に1枚のチケットのみが予約されます(a = a | b)
/***フィルター条件に応じて対応する列車番号を取得* @param quicketstr* @param ticketlist* @param condition* @return*/public static order create orderbycondition(list <teick> ticketlist、map条件){注文一時= null; biginteger(ticket.getticketflag()); //チケットを予約できる場合、在庫を長期間控除&& //(ticket.getsalechannel()==(ticket.getsalechannel()| 1))if(canticket(fromticket、 toticket)&& ticket.getTicketType() order(); emperder.setorderid(uuid.randomuuid()。toString()); threeder.setseattype(ticket.gettickettype()); tomeder.setticketflag(toticket.tostring(); muneded.ettrainno(ticket.gettrainno(); tempord er.setfromdate(ticket.getFromDate()); TheMeperder.SetsaleChannel(Ticket.getSaleChannel()); TheMeperder.SetticketGuid(Ticket.getGuid()); Ticket.Setticketflag(fromticket.or(roticket).tostring()1.4スタンプを押すかどうかを判断するには、a =〜(〜a | b)
/***チケットを予約できるかどうかを判断します
2。注文エンティティ(必要な注文情報を保持)
パッケージcom.train.ticket;/*** order entity*@author guo_zhifeng **/public class order {private string orderid; private string ticketguid; // bill idprivate string ticketflag; //購入マークプライベートストリングシートタイプ; orderid;} public void setorderid(string orderid){this.orderid = orderid;} public string getticketguid(){return ticketguid;} public void setticketguid(string ticketguid){this.ticketguid = titchentguid;} public string getticketflag( {this.ticketflag = titchentflag;} public string getSeattype(){return seattype;} public void setSeattype(string seattype){this.eattype = seattype;} public string getfromdate(){return fromdate;} public void setfromdate(} public fromdate(String date) getTrainno(){return trainno;} public void settrainno(string trainno){this.trainno = trainno;} public int getSalechannel(){return salechannel;} public void setsalechannel(int salechannel){this.salechannel;}}}3。チケットエンティティ(必要なチケット情報を保持)
パッケージcom.train.ticket;/***チケットエンティティ*@author guo_zhifeng **/public classチケット{private string ticketflag; private string ticketType; private int salechannel; private string trainno; private string fromdate; Guid;} public String getTrainno(){Return Trainno;} public void setTrainno(this.trainno){this.trainno = trainno;} public string gettickflag(){return ticketflag;} public void sitticketflag(String Ticketflag){thistictflag = ticketflag( ticketType;} public void settickettype(String TicketType){this.tickettype = ticketType;} public int getSaleChannel(){return salechannel;} public void setSalechannel(int salechannel){this.salechannel = salechannel;} public string getfromdate( SetFromDate(String FromDate){this.fromdate = fromdate;}}4。初期化情報をトレーニングする(主な情報のみ)
パッケージcom.train.ticket; import java.util.map;/***列車に関する情報*@author guo_zhifeng **/public class train {private string trainno; // private int stationnum; // stations private map <string、integer> seattotalnum; // void setfromdate(string fromdate){this.fromdate = fromdate;} public string gettrainno(){return trainno;} public void settrainno(string trainno){this.trainno = trainno;} public int getStationnum(){return setStationnum( StationNum;} public Map <String、integer> getSeattotalnum(){return seattotalnum;} public void setseattotalnum(Map <String、Integer> Seattotalnum){this.eattotalnum = seattotalnum;}}} 5。メインプログラム
5.1電車の初期化
5.2現場でのチケット購入の形式によれば、最大化はab bc cd de efなどです。
5.3時間のかかる出力
パッケージcom.train.main;インポートjava.io.file; import java.math.bigdecimal; Import java.math.biginteger; Import java.util.arraylist; Import java.util.hashmap; Import java.util.list; Import java.util.map; Import com.util.ticket. com.train.ticket.ticket; import com.train.ticket.train; Import com.train.util.commonutil; public static void main(string [] args){train = new Train(); train.settrainno(); train.settrainno( "sa"); settromdate( " = new Hashmap <String、integer>(); seatmap.put( "Business Seat"、); seatmap.put( "First Class"、); seatmap.put( "2番目のクラス"、); train.seteseattotalnum(seatmap); //生成チケットSystem.out.out.println( "Tarin"); commonutil.initticketlist(train); string filename = "d://result.txt"; file f = new file(filename); if(f.exists())f.delete(); long starttime = system.currenttimemillis(); // int i =; // long begintime = system.currenttimemillis(); list <dorder> ordersult = new arrayList <Order>(); for(int j =; j <train.getStationNum() - ; j ++){string chicketstr = commonutil.buidticket(j); // string ticketstr = commonutil.buidticket(、train.getStationnum();; // system.exit(); Train); OrderResult.Addall(TemplistOrder);} Long Endtime = System.CurrentTimeMillis(); System.out.Println( "Reservation Complete"); // int m =; //(チケットチケット:ticketlist){// string temp = m + "|| + commonutil.tojson(チケット) + "、"; // // system.out.println(temp); // commonutil.appendmethoda(filename、temp、true); // m ++; //} // int k =; // for(order order:ordersult){// string temp = ring.getoderid() + order.getSaleChannel()// + "||" + order.getFromDate()// + "||" + order.getSeattype()// + "||" + order.getTicketGuid()// + "||" + order.gettrainno()// + "||" + order.getTicketflag()// + "||" + new biginteger(order.getTicketflag())。toString()// + "||" + k; // commolutil.appendMethoda(filename、temp、true); // k ++; //} long eedtime = system.currenttimemillis(); system.out.println( "generate" + orderresult.size() + "||時間節時間:" +(endtime) + + "milliseconds"); system.out.println( "1秒あたりのドキュメントの生成(チケットごとに注文)" + new bigdecimal(orderresult.size())。完了 ");}}6。操作結果
上記は、編集者(II)が紹介したJava Code Practice 12306チケットアルゴリズムです。私はそれが誰にでも役立つことを願っています!