簡體   English   中英

Java:將TRUE / FALSE的所有可能組合添加到列表中

[英]Java: Add all possible combinations of TRUE/FALSE to a list

我已經看過其他有關此問題的帖子,但它們並不完全像這個問題。

我有以下代碼:

    public static List<Boosters.Builder> GetBoosters() {
    List<Boosters.Builder> boosters = new ArrayList<Boosters.Builder>();

    Boosters.Builder booster = new Boosters.Builder();

    booster.setLarge(Bool.TRUE).setMedium(Bool.TRUE).setSmall(Bool.TRUE);
    boosters.add(booster);

    booster.setLarge(Bool.FALSE).setMedium(Bool.TRUE).setSmall(Bool.FALSE);
    boosters.add(booster);

    booster.setLarge(Bool.TRUE).setMedium(Bool.FALSE).setSmall(Bool.TRUE);
    boosters.add(booster);

    booster.setLarge(Bool.TRUE).setMedium(Bool.TRUE).setSmall(Bool.FALSE);
    boosters.add(booster);

    // (etc, etc, etc)

    return boosters;
}

這是我在Java中執行的某些生成類型的一部分。 但是Bool.TRUE / Bool.FALSE的工作方式類似於普通的Java布爾值,因此您可以依靠它。

我正在嘗試創建一個循環,該循環將為我提供以下所有可能的TRUE / FALSE組合:

booster.setLarge(Bool.TRUE).setMedium(Bool.TRUE).setSmall(Bool.TRUE);

我無法弄清楚如何很好地循環執行此操作。 有人可以幫我嗎?

使用Bool#values()迭代枚舉的可能值:

for (Bool large : Bool.values())
   for (Bool medium : Bool.values())
        for (Bool small : Bool.values())
              boosters.add(new Boosters.Builder().setLarge(large).setMedium(medium).setSmall(small));

一種方法是運行02^n (不包括)之間的整數-其中n是您需要分配的變量數。

然后,您可以使用(x >> k) % 2來獲取變量數k的值。

這僅適用於少於64個值(使用long變量)。

       for (int x =0; x < 1<<k; x++) { 
            int val1 = (x >> 0) %2;
            int val2 = (x >> 1) %2;
            int val3 = (x >> 2) %2;
            ...
            System.out.println("" + val1 + "," + val2 + "," + val3);
        }

請注意,通過將val1,val2,...切換到數組val1,val2,...可以輕松地將此方法修改為任意數量的變量(適合long )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM