I need to be able to create a boolean array of one combination and run it through a program to see if it works. If not then I dispose of it and go to the next combination. My issue is that I don't know how to create this array because n can be equal anywhere from 1-1000. So I was planning on using Integer.toBinaryString but that won't work due to its too big when it gets to past 32. Any help would be greatful.
Thanks!
The boolean array can be used to store boolean datatype values only and the default value of the boolean array is false. An array of booleans are initialized to false and arrays of reference types are initialized to null. In some cases, we need to initialize all values of the boolean array with true or false.
Declaration: The declaration of boolean data type in C++ involve the use of keyword bool, whereas declaration in Java is done by keyword boolean. Default Value: Default value is the value initially stored in the variable, when it is declared, but not initialized to any value.
Boolean Arrays in C: Like normal arrays, we can also create the boolean arrays using the data type bool from stdbool. h header file in C. The boolean array can store multiple true or false values for each element and all elements and can be accessed by using indexes.
The "accepted answer" states that
Tested and this will work for high values of n, such as 10000 and so on.
But this is incorrect.
public static void main(String[] args) {
final int n = 3;
for (int i = 0; i < Math.pow(2, n); i++) {
String bin = Integer.toBinaryString(i);
while (bin.length() < n)
bin = "0" + bin;
char[] chars = bin.toCharArray();
boolean[] boolArray = new boolean[n];
for (int j = 0; j < chars.length; j++) {
boolArray[j] = chars[j] == '0' ? true : false;
}
System.out.println(Arrays.toString(boolArray));
}
}
When n > 31
it will loop forever repeating the first 2^31 combinations since i
will overflow and will never reach Math.pow(2, n)
. You can easily test this with
public static void main2(String[] args){
int n = 32;
for (int i = 0; i < Math.pow(2, n); i++){
if (i == Integer.MIN_VALUE) {
// i overflows
System.out.println("i exceeded Integer.MAX_VALUE");
}
}
}
Code above will indefinitely print i exceeded Integer.MAX_VALUE
However this can easily be corrected using BigInteger
or a similar data structure for looping. The code below will work for n <= Integer.MAX_VALUE
public static void main(String[] args) {
final int n = 32;
BigInteger bi = BigInteger.ZERO;
BigDecimal rows = new BigDecimal(Math.pow(2, n));
while (bi.compareTo(rows.toBigInteger()) < 0) {
String bin = bi.toString(2);//Integer.toBinaryString(i);
while (bin.length() < n)
bin = "0" + bin;
char[] chars = bin.toCharArray();
boolean[] boolArray = new boolean[n];
for (int j = 0; j < chars.length; j++) {
boolArray[j] = chars[j] == '0' ? true : false;
}
System.out.println(Arrays.toString(boolArray));
bi = bi.add(BigInteger.ONE);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With