组合算法

本文介绍了一种处理中奖数据的方法,通过将具有相同票ID的中奖数据对象的中奖金额进行累加,并且合并中奖等级。此方法适用于彩票等应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



 

 

图片说明:
上面是一个数组,存储着某个类的多个对象.

 

对象结构:

//中奖数据对象
public class BonusItemNew {
 private String ticketID;//票ID
 private int playType;//彩票种类
 private double money;//中奖金额
 private int size;//中奖注数
 private int bonusLevel;//中奖等级
 private boolean isBombBonus;//是否大奖

 private String content;//投注内容
 private String bonusNumber;//中奖号码

 ....
}

 

功能要求:
将数据结构中对象ticketID相等的对象的中奖金额相加,奖金等级合并。


算法实现:

/**
 * 按照业务要求的规则组装中奖数据
 * 1.同一票的奖金money求和
 * 2.奖金等级bonusLevel字符串相加
 * 3.相同等级的奖金的size字符串相加
 * 
 * @param itemSet 中奖数据对象集合
 * @return
*/
public List bonusItemHandler(Set itemSet){
  
 itemListInit = new ArrayList();
 List itemRSList = new ArrayList();
 Object[] itemArray = itemSet.toArray();
     
     if(itemSet.size() > 0){
      for(int i = 0; i < itemArray.length; i++){//遍历数组
       BonusItemNew itemNew = new BonusItemNew();
       itemNew.setTicketID(((BonusItem)itemArray[i]).getTicketID());
       itemNew.setMoney(((BonusItem)itemArray[i]).getMoney());
       itemNew.setBonusLevel(((BonusItem)itemArray[i]).getBonusLevel());
       itemNew.setSize(((BonusItem)itemArray[i]).getSize());
       itemNew.setContent(itemNew.getSize() + "注" + itemNew.getBonusLevel() + "等奖\n");
       
       itemListInit.add(itemNew);
      }
      
      
      for(int i = 0; i < itemListInit.size(); i++){
 
       BonusItemNew itemNewI = (BonusItemNew)itemListInit.get(i);
       double money = itemNewI.getMoney();
       
       for(int j = i + 1; j < itemListInit.size(); j++){//从下一个开始比较
        BonusItemNew itemNewJ = (BonusItemNew)itemListInit.get(j);
        
     if(i != j && itemNewI.getTicketID().equals(itemNewJ.getTicketID())){//中奖票ID相同,则中奖金额相加
      
      money += itemNewJ.getMoney();
      itemNewI.setContent(itemNewI.getContent() + itemNewJ.getContent()); 
         
          itemNewI.setPlayType(itemNewI.getPlayType());
      itemNewI.setMoney(money);
      
      itemListInit.remove(j);     
      
      j -= 1;
     }
       }
       
       itemRSList.add(itemNewI);
      }
     }
     
     if(itemRSList != null && itemRSList.size() > 0){
      for(Iterator it = itemRSList.iterator(); it.hasNext();){
       BonusItemNew item = (BonusItemNew)it.next();
         }
     }
     
     return itemListInit;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值