<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          不要網(wǎng)上亂拷貝代碼了!一段網(wǎng)上找的代碼突然炸了!

          共 817字,需瀏覽 2分鐘

           ·

          2020-11-19 13:02

          來(lái)源:陳宏鴻

          cnblogs.com/aspwebchh/p/12220673.html


          碰到一個(gè)需求,給服某些要求的玩家的發(fā)送道具獎(jiǎng)勵(lì),獎(jiǎng)勵(lì)的數(shù)量根據(jù)離線的天數(shù)計(jì)算。

          這個(gè)需求實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,只需要在玩家上線的時(shí)候計(jì)算上次離線時(shí)間和當(dāng)前時(shí)間間隔的天數(shù),然后根據(jù)策劃的算法,計(jì)算出道具種類(lèi)與數(shù)量,發(fā)一封郵件給玩家就可以了。

          計(jì)算兩個(gè)時(shí)間間隔天數(shù)的函數(shù)沒(méi)有現(xiàn)成的,自己又懶得寫(xiě),就上谷歌搜了下,選了第一條結(jié)果,代碼如下

          public?static?int?differentDays(Date?date1,Date?date2)
          ????
          {
          ????????Calendar?cal1?=?Calendar.getInstance();
          ????????cal1.setTime(date1);

          ????????Calendar?cal2?=?Calendar.getInstance();
          ????????cal2.setTime(date2);
          ???????int?day1=?cal1.get(Calendar.DAY_OF_YEAR);
          ????????int?day2?=?cal2.get(Calendar.DAY_OF_YEAR);

          ????????int?year1?=?cal1.get(Calendar.YEAR);
          ????????int?year2?=?cal2.get(Calendar.YEAR);
          ????????if(year1?!=?year2)???//同一年
          ????????{
          ????????????int?timeDistance?=?0?;
          ????????????for(int?i?=?year1?;?i?????????????{
          ????????????????if(i%4==0?&&?i%100!=0?||?i%400==0)????//閏年
          ????????????????{
          ????????????????????timeDistance?+=?366;
          ????????????????}
          ????????????????else????//不是閏年
          ????????????????{
          ????????????????????timeDistance?+=?365;
          ????????????????}
          ????????????}

          ????????????return?timeDistance?+?(day2-day1)?;
          ????????}
          ????????else????//不同年
          ????????{
          ????????????System.out.println("判斷day2?-?day1?:?"?+?(day2-day1));
          ????????????return?day2-day1;
          ????????}
          ????}

          代碼來(lái)源:https://www.cnblogs.com/0201zcr/p/5000977.html

          把代碼復(fù)制到項(xiàng)目里,調(diào)試下,發(fā)現(xiàn)沒(méi)問(wèn)題就直接用了,畢竟谷歌結(jié)果第一名,放心。

          這段代碼跑了幾個(gè)月一直沒(méi)問(wèn)題,但是到了2020-1-1日那天,有玩家反饋收到了幾百封獎(jiǎng)勵(lì)郵件,高興壞了,但是出于對(duì)游戲的熱愛(ài),還是通知了運(yùn)營(yíng)人員。

          運(yùn)營(yíng)把bug反饋到服務(wù)器這邊后我開(kāi)始排查,百思不得其解的是最近幾天都沒(méi)有更新服務(wù)器, 而前幾天服務(wù)器都穩(wěn)穩(wěn)地,怎么突然就出BUG了呢。

          接下來(lái)就是分析玩家數(shù)據(jù),結(jié)合代碼邏輯確定問(wèn)題所在,最終根據(jù)BUG的表現(xiàn)排除了所有可能性后,發(fā)現(xiàn)唯一可能出問(wèn)題的地方就是那個(gè)網(wǎng)上復(fù)制過(guò)來(lái)的計(jì)算天數(shù)差的函數(shù)。

          根據(jù)調(diào)試發(fā)現(xiàn),這個(gè)函數(shù)在兩個(gè)日期參數(shù)是不同的年份并且第一個(gè)日期大于第二個(gè)日期的時(shí)候,會(huì)返回一個(gè)錯(cuò)誤的結(jié)果

          比如

          differentDays("2020-1-1","2019-12-25")

          理論上這么調(diào)用正確的結(jié)果是 -7,但是因?yàn)楹瘮?shù)有bug,調(diào)用結(jié)果是 358

          于是本來(lái)不用發(fā)獎(jiǎng)勵(lì),因?yàn)檫@種特殊情況一下子發(fā)出去358份,嚴(yán)重影響了游戲某類(lèi)道具的平衡性。

          至于補(bǔ)救方式就是統(tǒng)計(jì)名單,把發(fā)出去但還沒(méi)有用掉的道具回收,用掉的就當(dāng)福利,然后再發(fā)公告道歉,再送些其他物品彌補(bǔ)。

          也幸好補(bǔ)救的及時(shí),要是這些道具收不回來(lái),游戲運(yùn)營(yíng)的策略都要大變了,我特么肯定沒(méi)好果子吃了。

          所以千萬(wàn)別在網(wǎng)上復(fù)制來(lái)路不明的代碼亂用,如果真的要用,必須反復(fù)測(cè)試,否則哪一天突然暴雷有你受的。

          改用Java8的日期庫(kù)修復(fù)了BUG

          ????public?static?int?differentDays(Date?date1,?Date?date2)?{
          ????????if?(date1?==?null?||?date2?==?null)?{
          ????????????throw?new?RuntimeException("日期不能為空");
          ????????}
          ????????LocalDate?localDate1?=?date2LocalDate(date1);
          ????????LocalDate?localDate2?=?date2LocalDate(date2);
          ????????return?Generic.long2int(localDate1.until(localDate2,?ChronoUnit.DAYS));
          ????}

          ????public?static?LocalDate?date2LocalDate(Date?date)?{
          ????????Instant?instant?=?date.toInstant();
          ????????ZoneId?zoneId?=?ZoneId.systemDefault();
          ????????LocalDate?localDate?=?instant.atZone(zoneId).toLocalDate();
          ????????return?localDate;
          ????}


          END




          若覺(jué)得文章對(duì)你有幫助,隨手轉(zhuǎn)發(fā)分享,也是我們繼續(xù)更新的動(dòng)力。


          長(zhǎng)按二維碼,掃掃關(guān)注哦

          ?「C語(yǔ)言中文網(wǎng)」官方公眾號(hào),關(guān)注手機(jī)閱讀教程??



          點(diǎn)擊“閱讀原文”,領(lǐng)取 2020 年最新免費(fèi)技術(shù)資料大全

          ↓↓↓?
          瀏覽 51
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久久黄色视频 | 欧美肏屄视频 | 日韩精品日韩毛片无码 | 先锋影音俺去也 | 欧美性猛交XXXX乱大交 |