Мне нечего было делать в пятницу. Основываясь на предыдущей статье об анализе теории алгоритма билетов 12306 (версия Java), я провел практику кодирования Java для читателей для ссылки на (ниже приведено простое описание соответствующего кода)
1. Инструменты бронирования билетов
1.1 Инициализируйте информацию о билете автомобиля поезда.
/*** Сгенерировать информацию о билете ** @param train* @return*/public static list <keek> initticketlist (поезд) {list <Ticke> result = new Arraylist <keale> (); Map <String, Integer> seatmap = train.getSeatTotalNum (); для (integer, integer> intpirt: seatmap.entryset () {) stricteure; tickettype = entry.getkey (); for (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 (train)); ticket.settrainno (train.getTrainno ()); result.add (ticket);}} возврат результат;}1.2 Сгенерировать покупку билета на участке (например, первая смена может быть сделана, например, первая станция 1, вторая станция «10», а вторая станция возвращается в десятичной системе)
/*** Создать* @param i* @param stationnum* @return*/public static String buidticket (int i, int stationnum) {biginteger temp = new biginteger ("0"); для (int j = i; j <stationnum; j ++) {temp = temp.or (new Biginteger (buidticket (j)); temp.shiftright (1) .toString ();}1.3 Основная процедура для бронирования билетов, забронирован только один билет (a = a | b)
/*** Получить соответствующий номер поезда в соответствии с условиями фильтра* @param ticketstr* @param ticketlist* @param condity* @return*/public static order createorderbycondition (String ticketstr, list <билет> licketlist, состояние карты) {order temporder = null; для (билет билета: билет) {biginteger toticket = new biginteger (билет); BigInteger (ticket.getTicketFlag ()); // Если вы можете забронировать билеты, то вы будете вычесть инвентаризацию в течение долгого времени && // (ticket.getSaleChannel () == (ticket.getSaleChannel () | 1)) if (canticket (fromTicket,, toticket) && ticket.getTicketType (). equals (condity.get ("tickettype"). toString ()) // && (ticket.getSaleChannel () == (ticket.getSaleChannel () | 2))) {temporder = new Order (); Temporder.SetOrderId (uuid.randomuuid (). ToString ()); Temporder.SetSeatType (ticket.getTicketType ()); Temporder.setTicketFlag (toticket.toString ()); Temporder.setTrainno (ticket.getTrainno ()); tempord Er.SetFromDate (ticket.getFromDate ()); Temporder.SetSaleChannel (ticket.getSaleChannel ()); Temporder.SetTicketGuid (ticket.getGuid ()); Ticket.SetTicketFlag (fromTicket.or (toticket) .toString (); Break;} return Tempord;1.4, чтобы определить, штампно, a = ~ (~ a | b)
/*** Определите, можете ли вы забронировать билеты ** @param fromticket* @param toticket* @return*/private static boolean canticket (biginteger fromticket, biginteger toticket) {return fromticket.equals (fromticket.not (). Или (toticket) .not ());};};2. Заказ сущности (сохранить необходимую информацию о заказе)
пакет com.train.ticket;/*** Заказ объект*@author guo_zhifeng **/public class order {private String orderid; частная строка Ticketguid; // Билл Idprivate String Ticketflag; // Mark Mark Private String Seattype; // seat private string fromdate; // Дата вылета private string trane OrderId;} public void setOrderId (string orderId) {this.orderId = orderId;} public String getTicketGuid () {return ticketGuid;} public void centicketGuid (String ticketGuid) {this.TicketGuid = ticketGuid;} public Stringflag () {return Ticketflag;} public void cettelickflag (Stringflag (stringflag (stringflag (stringflag (stringflag (stringflag (stringflag (string keickflag (stringflag) {this.ticketflag = ticketflag;} public String geteAttype () {return seattype;} public void setSeatType (string seatType) {this.SeatType = seatType;} public String getFromDate () {return fromDate;} public void setFromDate (string fromDate) {this.from; strate; getTrainno () {return tranno;} public void settrainno (string tranno) {this.trainno = trainno;} public int getSaleChannel () {return salechannel;} public void setsalechannel (int salechannel) {this.salechannel = salechannel;}}}}}}}}}}3. Билетная организация (сохранить необходимую информацию о билетах)
Пакет com.train.ticket;/*** Билет Entity*@author guo_zhifeng **/public class ticket {private String ticketflag; private String tickettype; private int salechannel; private String tranno; Private String Guid; Private String FromDate; // Date Date Public String getGuid () {return Guid; getTrainno () {return tranno;} public void settrainno (string tranno) {this.trainno = trainno;} public String getTicketFlag () {return ticketflag;} public void senticketflag (String ticketflag) {this.ticketflag = ticketflag;} public string getTicket () {publictytem 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 void voDTROMDATE (stringDATE (stringDATE (strAtromDATE (strAtRomDATE () fromDate;}}4. Информация по инициализации поезда (только основная информация)
пакет com.train.ticket; import java.util.map;/*** Информация о поездке*@author guo_zhifeng **/public class train {private String trainno; // номер поезда частные int stationnum; // количество станций частная карта <строка, integer> seattotalnum; // количество различных мест частной строки; void setFromDate (string fromDate) {this.FromDate = fromDate;} public String getTrainno () {return tranno;} public void setTrainno (String tranno) {this.trainno = trainno;} public int getStationNum () {return stationnum; stationNum;} public map <string, integer> geteAttotalnum () {return seattotalnum;} public void setSeatTotalNum (map <string, integer> seatTotalNum) {this.SeatTotalNum = seatTotalNum;}} 5. Основная программа
5.1 Инициализируйте автомобиль поезда
5.2 В соответствии с формой закупок билетов на месте, максимизация - AB BC CD de EF и т. Д.
5.3 Труто-потребляющий выход
пакет com.train.main; импорт java.io.file; импорт java.math.bigdecimal; импорт java.math.biginteger; import java.util.arraylist; import java.util.hashmap; import java.util.list; импорт java.ut.map; импорт. com.train.ticket.ticket; import com.train.ticket.train; import com.train.util.commonutil; открытый класс maintest {public static void main (string [] args) {train train = new train (); train.settrainno ("sa"); sestfromdate ("//new Train Новая Hashmap <String, Integer> (); Seatmap.put ("Business Seat",); seatmap.put ("первый класс",); seatmap.put ("второй класс",); train.setseattotalnum (seatmap); // Создание билетов. filename = "d: //result.txt"; файл f = новый файл (имя файла); if (f.exists ()) f.delete (); long starttime = System.currentTimeMillis (); // int i =; // for (билет билета: билет: {// commonutil.appendmethoda (filename, // i + "||" + commonutil.tojson (билет) + "/n", true); // i ++; //} system.out.println (starting "); long BetIntime = System.currentTimeMillis (); List <Roord> OrderResult = new ArrayList <Roord> (); for (int j =; j <train.getStationnum () -; j ++) {String ticketStr = commonutil.buidticket (j); // string ticketstr = commonutil.buidticket (, train.getStationnum ()) ;; // system.exit (); lilect <Raind> templistorder = commontult Train); orderresult.addall (Templistorder);} long EndTime = System.CurrentTimeMillis (); System.out.println ("Забронирование завершено"); // int m =; // for (билет билета: билет) {// String temp = m + "||" + Commonutil.tojson (билет) + ","; // // system.out.println (temp); // commonutil.appendmethoda (имя файла, temp, true); // m ++; //} // int k =; // for (порядок порядка: orderresult) {// string = order.getorderid () // + "|| + order.getSaleChannel () // + "||" + order.getFromDate () // + "||" + order.getSeatType () // + "||" + order.getTicketGuid () // + "||" + order.getTrainno () // + "||" + order.getTicketFlag () // + "||" + new Biginteger (order.getTicketFlag ()). ToString () // + "||" + k; // commonutil.appendmethoda (имя файла, temp, true); // k ++; //} long eedtime = system.currenttimelis (); system.out.println («генерировать порядок» + orderresult.size () + »|| «Milliseconds»); System.out.println («генерировать количество документов в секунду (порядок по билету)» + new Bigdecimal (orderresult.size ()). Умножьте (new BigDecimal ()). Разделите (new BigDecimal (EndTime - BetIntime) ,, BigDecimal.Round_half_half_half_down); Завершенный");}}6. Результаты работы
Выше приведено алгоритм билетов Java Code 12306, представленный вам редактором (II). Я надеюсь, что это будет полезно для всех!