2017-05-15 35 views
0

我的随机部分代码是:C# - 选择随机项的清单,概率在开始下降1元几次

 public Gun GetRandomGun(IEnumerable<Gun> sequence, Random random) 
     { 
      int totalWeight = sequence.Sum(p => p.Probability); 
      int weightedPick = random.Next(totalWeight); 
      foreach (var item in sequence) 
      { 
       if (weightedPick < item.Probability) 
       { 
        return item; 
       } 
       weightedPick -= item.Probability; 
      } 
      throw new InvalidOperationException("List must have changed..."); 

所以我试图让随机枪概率,你可以看到。 因此,当我在开始时打开程序时,我几次调用该命令时,我得到的是相同的枪,然后该程序给我随机枪,有时甚至给出相同的枪x 2 我该如何解决它? 我的XML配置:

<Gun> 
     <GunID>116</GunID> 
     <Probability>18</Probability> 
    </Gun> 
    <Gun> 
     <GunID>519</GunID> 
     <Probability>5</Probability> 
    </Gun> 
    <Gun> 
     <GunID>363</GunID> 
     <Probability>25</Probability> 
    </Gun> 
    <Gun> 
     <GunID>126</GunID> 
     <Probability>10</Probability> 
    </Gun> 
    <Gun> 
     <GunID>112</GunID> 
     <Probability>15</Probability> 
    </Gun> 
    <Gun> 
     <GunID>297</GunID> 
     <Probability>5</Probability> 
    </Gun> 
    <Gun> 
     <GunID>300</GunID> 
     <Probability>5</Probability> 
    </Gun> 
    <Gun> 
     <GunID>1041</GunID> 
     <Probability>25</Probability> 
    </Gun> 
    <Gun> 
     <GunID>1037</GunID> 
     <Probability>25</Probability> 
    </Gun> 

所以对于当我启动程序并调用命令几次,我只得到ID 1041例如和几次后,我开始变得随机枪,例如有时当我打电话给命令2次时,我得到的是相同的枪,但这不重要 请帮我修复这个错误,谢谢!

+0

你是怎么调用这个函数的?你可以显示“随机”在哪里初始化? – degant

回答

0

存储上次检索到的枪身编号,然后检索新枪检查其ID与最后存储枪ID如果他们匹配重新调用该方法。

使用递归函数。