Java 控制隨機數出現的機率

邢闖洋發表於2021-12-25
// app狀態
private String appStatus[]={"system", "start", "stop" , "install", "uninstall"};

// appStatus的權重值,為以後取隨機數appStatus加權重時用
private int appStatusWeight[]={1000,20,20,100,100}; 
/*
    要使得隨機數是根據權重值獲得,則有兩種方案可行
    1、system在陣列中出現1000次(即權重次數)、start出現20次、stop出現20次、   install出現100、uninstall出現100次
         此方案佔的記憶體空間大

    2、1000+20+20+100+100=1240,生成隨機數[0,1240),  
         區間[0,1000)代表system
         區間[1000,1020)代表start
         區間[1020,1040)代表stop
         區間[1040,1140)代表install
         區間[1140,1240)代表uninstall
 */

第二個方案生成新的權重值陣列的方法

/**
 * 迴圈 Int 陣列中的每個值都求和 * * @param intArray [1,2,3,4,5]
 * @return [1,3,6,10,15]
 */
 public static List<Integer> eachIntArrayValueSum(List<Integer> intArray) {

    // 當前機率最大值
    Integer currentMaxWeight = 0;
    // 新的機率陣列,該陣列的每個值都是之前的值累加的
    List<Integer> newWeightList = new ArrayList<>();
    for (int i = 0; i < intArray.size(); i++) {

        int currentWeight = 0;

        if (i == 0) {
            currentMaxWeight = intArray.get(i);
            currentWeight = intArray.get(i);
            newWeightList.add(currentWeight);
            continue;  
        }

        // 當前最大值
        currentWeight = currentMaxWeight + intArray.get(i);
        currentMaxWeight = currentWeight;

        newWeightList.add(currentWeight);
    }

    return newWeightList;
}

參考連結

Java 控制隨機數出現的機率

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章