How is it possible to do the Cartesian product using two arrays?
A={1,2,3}
B={2,3,4}
C={(1,2),(1,3),(1,4),(2,2),(2,3),(2,4),(3,2),(3,3),(3,4)}
This is the code I was using, but I always get a IndexOutOfBoundException
.
public int[] cartesianProduct(int[] s1, int[] s2) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < s1.length; i++) {
for (int v1 : s1) {
for (int v2 : s2) {
list.add(s1[i], s2[i]);
}
}
}
int[] result = new int[list.size()];
int k = 0;
for (int i : list) {
result[k++] = i;
}
return result;
}
The elements of the output array should be pairs of integers, therefore an int
array cannot be the type of the output, and you can't use a List<Integer>
to collect the data.
One way to represent each pair of numbers is an int array of two elements. This way the output would be a 2D array, and the List
used to collect the data can be a List<int[]>
:
public int[][] cartesianProduct(int[] s1, int[] s2) {
List<int[]> list = new ArrayList<>();
for (int v1 : s1) {
for (int v2 : s2) {
list.add(new int[]{v1, v2});
}
}
int[][] result = new int[list.size()][2];
int k = 0;
for (int[] i : list) {
result[k++] = i;
}
return result;
}