Search code examples
javabitset

Print values from BitSet with for loop


I want to print what I currently have with a single for loop (or another form of iteration) and only one flag declaration but I can't figure it out without using 'flag#' for each defined value. There should be 5 bits - which I have - but only one flag to iterate. I'm using divisibility with modulo (%) to sort each flag. Code below.

import java.util.*;

public class BitSet {

    public static void main(String args[]) {
        BitSet flags1 = new BitSet(5);
        BitSet flags2 = new BitSet(5);
        BitSet flags3 = new BitSet(5);
        BitSet flags4 = new BitSet(5);
        BitSet flags5 = new BitSet(5);

        for (int i = 0; i < 6; i++) {
            if((i % 1) == 0) flags1.set(i);
            if((i % 2) == 0) flags2.set(i);
            if((i % 3) == 0) flags3.set(i);
            if((i % 4) == 0) flags4.set(i);
            if((i % 5) == 0) flags5.set(i);
        }

        System.out.println("Numbers divisible by 1: " + flags1);
        System.out.println("Numbers divisible by 2: " + flags2);
        System.out.println("Numbers divisible by 3: " + flags3);
        System.out.println("Numbers divisible by 4: " + flags4);
        System.out.println("Numbers divisible by 5: " + flags5);
    }
}

Solution

  • Use an array (or an ArrayList<BitSet>) to store the bitsets and then iterate over the array.

    import java.util.*;
    
    
    
      public class BitSet {
            public static void main(String args[]) {
               BitSet[] flags = new BitSet[5];
            for (int i = 0; i < flags.length; i++) {
               flags[i] = new BitSet(5);
            }
    
            for (int i = 1; i < 6; i++) {
                for (int j = 1; j <= 5; j++) {
                    if (i % j == 0) {
                      flags[j - 1].set(i);
                    }
                }
            }
    
            for (int i = 0; i < flags.length; i++) {
                System.out.printf("Numbers divisible by %d: %s%n", i + 1, flags[i]);
            }
        }