I have an integer number withing an interval [0,7]. And I want to convert this number into a Boolean list with 3 elements with Java.
1st element in the list has a value of 4, 2nd element has 2 and 3rd element is 1. Their sum makes 7 if all the elements in the list are "true". "False" has a value of 0.
Here are the all possibilities:
If the number is 7 my boolean list is [true, true, true]
If the number is 6 my boolean list is [true, true, false]
If the number is 5 my boolean list is [true, false, true]
If the number is 4 my boolean list is [true, false, false]
If the number is 3 my boolean list is [false, true, true]
If the number is 2 my boolean list is [false, true, false]
If the number is 1 my boolean list is [false, false, true]
If the number is 0 my boolean list is [false, false, false]
I don't want to code this with 8 else if blocks. I think there must be a smarter solution with combinations of the numbers.
Here is my function declaration: default List<Boolean> convertIntToBooleanList(int i);
Do you have any ideas how can I solve it without hardcoding?
Thanks!
You need to convert your number to base 2, then, for each bit, set the corresponding value in the array to true
if the bit is 1
.
Example:
7 = 111 = [true, true, true]
5 = 101 = [true, false, true]
4 = 100 = [true, false, false]
Basic Java implementation (not well versed with Java, so the solution might be made more optimal):
public static void main (String[] args) throws java.lang.Exception
{
Integer x = 3;
String binary = String.format("%3s", Integer.toBinaryString(x));
List<Boolean> list = new ArrayList<Boolean>();
for (int i = 0; i < binary.length(); i++) {
list.add(binary.charAt(i) == '1');
}
System.out.println(list);
}