|
@@ -1,7 +1,6 @@
|
|
package com.kioor.utils;
|
|
package com.kioor.utils;
|
|
|
|
|
|
import com.kioor.dto.Monster2GoodsDTO;
|
|
import com.kioor.dto.Monster2GoodsDTO;
|
|
-
|
|
|
|
import com.github.javafaker.Faker;
|
|
import com.github.javafaker.Faker;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
@@ -25,9 +24,9 @@ public class RandomUtils {
|
|
private static final ThreadLocalRandom RANDOM =
|
|
private static final ThreadLocalRandom RANDOM =
|
|
ThreadLocalRandom.current();
|
|
ThreadLocalRandom.current();
|
|
/**
|
|
/**
|
|
- * 怪物掉落物品计算
|
|
|
|
- * @param monster2GoodsDTOList
|
|
|
|
- * @return
|
|
|
|
|
|
+ * 怪物掉落物品计算(对象列表)
|
|
|
|
+ * @param monster2GoodsDTOList 对象列表
|
|
|
|
+ * @return 筛选后的对象列表
|
|
*/
|
|
*/
|
|
public static List<Monster2GoodsDTO> obtainGoods(List<Monster2GoodsDTO> monster2GoodsDTOList){
|
|
public static List<Monster2GoodsDTO> obtainGoods(List<Monster2GoodsDTO> monster2GoodsDTOList){
|
|
List<Monster2GoodsDTO> backMonster2GoodsDTOList = new ArrayList<>();
|
|
List<Monster2GoodsDTO> backMonster2GoodsDTOList = new ArrayList<>();
|
|
@@ -38,10 +37,30 @@ public class RandomUtils {
|
|
}
|
|
}
|
|
return backMonster2GoodsDTOList;
|
|
return backMonster2GoodsDTOList;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 怪物掉落物品计算(数组)
|
|
|
|
+ * @param propArr 将概率按照顺序放入数组
|
|
|
|
+ * @return 命中的数组下标
|
|
|
|
+ */
|
|
|
|
+ public static int[] obtainGoods(BigDecimal[] propArr){
|
|
|
|
+ StringBuffer indexStr = new StringBuffer();
|
|
|
|
+ List<Monster2GoodsDTO> backMonster2GoodsDTOList = new ArrayList<>();
|
|
|
|
+ for(int i=0;i<propArr.length;i++){
|
|
|
|
+ if(isLuck(propArr[i])){
|
|
|
|
+ indexStr.append(i).append(",");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if(indexStr.length()==0){
|
|
|
|
+ return new int[0];
|
|
|
|
+ }
|
|
|
|
+ return Arrays.asList(indexStr.toString().split(",")).stream().mapToInt(Integer::parseInt).toArray();
|
|
|
|
+ }
|
|
/**
|
|
/**
|
|
* 由概率随机是否触发
|
|
* 由概率随机是否触发
|
|
*
|
|
*
|
|
- * @param chance 0.00 - 100.00
|
|
|
|
|
|
+ * @param chance 0.000000 - 1.000000
|
|
* @return boolean
|
|
* @return boolean
|
|
*/
|
|
*/
|
|
public static final boolean isLuck(BigDecimal chance) {
|
|
public static final boolean isLuck(BigDecimal chance) {
|
|
@@ -52,10 +71,14 @@ public class RandomUtils {
|
|
}
|
|
}
|
|
|
|
|
|
public static void main(String[] args) {
|
|
public static void main(String[] args) {
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 怪物掉落物品计算(对象列表)
|
|
|
|
+ */
|
|
List<Monster2GoodsDTO> monster2GoodsDTOList = new ArrayList<>();
|
|
List<Monster2GoodsDTO> monster2GoodsDTOList = new ArrayList<>();
|
|
|
|
|
|
- Monster2GoodsDTO monster2GoodsDTO = new Monster2GoodsDTO(1000000L,"金疮药",new BigDecimal("0.100000"));
|
|
|
|
- monster2GoodsDTOList.add(monster2GoodsDTO);
|
|
|
|
|
|
+ Monster2GoodsDTO monster2GoodsDTO1 = new Monster2GoodsDTO(1000000L,"金疮药",new BigDecimal("0.100000"));
|
|
|
|
+ monster2GoodsDTOList.add(monster2GoodsDTO1);
|
|
|
|
|
|
Monster2GoodsDTO monster2GoodsDTO2 = new Monster2GoodsDTO(1000001L,"柿饼",new BigDecimal("0.100000"));
|
|
Monster2GoodsDTO monster2GoodsDTO2 = new Monster2GoodsDTO(1000001L,"柿饼",new BigDecimal("0.100000"));
|
|
monster2GoodsDTOList.add(monster2GoodsDTO2);
|
|
monster2GoodsDTOList.add(monster2GoodsDTO2);
|
|
@@ -72,7 +95,7 @@ public class RandomUtils {
|
|
Monster2GoodsDTO monster2GoodsDTO6 = new Monster2GoodsDTO(2000003L,"青铜戒",new BigDecimal("0.010000"));
|
|
Monster2GoodsDTO monster2GoodsDTO6 = new Monster2GoodsDTO(2000003L,"青铜戒",new BigDecimal("0.010000"));
|
|
monster2GoodsDTOList.add(monster2GoodsDTO6);
|
|
monster2GoodsDTOList.add(monster2GoodsDTO6);
|
|
|
|
|
|
- Monster2GoodsDTO monster2GoodsDTO7 = new Monster2GoodsDTO(2000004L,"青铜镯",new BigDecimal("0.010000"));
|
|
|
|
|
|
+ Monster2GoodsDTO monster2GoodsDTO7 = new Monster2GoodsDTO(2000004L,"青铜镯",new BigDecimal("0.910000"));
|
|
monster2GoodsDTOList.add(monster2GoodsDTO7);
|
|
monster2GoodsDTOList.add(monster2GoodsDTO7);
|
|
|
|
|
|
Monster2GoodsDTO monster2GoodsDTO8 = new Monster2GoodsDTO(2000005L,"青铜项链",new BigDecimal("0.010000"));
|
|
Monster2GoodsDTO monster2GoodsDTO8 = new Monster2GoodsDTO(2000005L,"青铜项链",new BigDecimal("0.010000"));
|
|
@@ -87,11 +110,11 @@ public class RandomUtils {
|
|
Monster2GoodsDTO monster2GoodsDTO11 = new Monster2GoodsDTO(2000008L,"青铜刀",new BigDecimal("0.010000"));
|
|
Monster2GoodsDTO monster2GoodsDTO11 = new Monster2GoodsDTO(2000008L,"青铜刀",new BigDecimal("0.010000"));
|
|
monster2GoodsDTOList.add(monster2GoodsDTO11);
|
|
monster2GoodsDTOList.add(monster2GoodsDTO11);
|
|
|
|
|
|
- //单次测试
|
|
|
|
- List<Monster2GoodsDTO> backMonster2GoodsDTOList1 = obtainGoods(monster2GoodsDTOList);
|
|
|
|
- for(Monster2GoodsDTO backMonster2GoodsDTO:backMonster2GoodsDTOList1) {
|
|
|
|
- System.out.println(backMonster2GoodsDTO.getGoodsName());
|
|
|
|
- }
|
|
|
|
|
|
+// //单次测试
|
|
|
|
+// List<Monster2GoodsDTO> backMonster2GoodsDTOList1 = obtainGoods(monster2GoodsDTOList);
|
|
|
|
+// for(Monster2GoodsDTO backMonster2GoodsDTO:backMonster2GoodsDTOList1) {
|
|
|
|
+// System.out.println(backMonster2GoodsDTO.getGoodsName());
|
|
|
|
+// }
|
|
|
|
|
|
//批量测试
|
|
//批量测试
|
|
// int count = 100;
|
|
// int count = 100;
|
|
@@ -109,5 +132,15 @@ public class RandomUtils {
|
|
// result.forEach((key,value)->{
|
|
// result.forEach((key,value)->{
|
|
// System.out.println(key+":"+value);
|
|
// System.out.println(key+":"+value);
|
|
// });
|
|
// });
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 怪物掉落物品计算(数组)
|
|
|
|
+ */
|
|
|
|
+ BigDecimal[] propArr = new BigDecimal[monster2GoodsDTOList.size()];
|
|
|
|
+ for(int i=0;i<monster2GoodsDTOList.size();i++){
|
|
|
|
+ propArr[i] = monster2GoodsDTOList.get(i).getGoodsProb();
|
|
|
|
+ }
|
|
|
|
+ int[] resultIndex = obtainGoods(propArr);
|
|
|
|
+ System.out.println(Arrays.toString(resultIndex));
|
|
}
|
|
}
|
|
}
|
|
}
|