deo*_*oll 2 java arrays generics
我为一个nCr问题编写了一个实用程序类。它接受一个通用数组并返回所有组合(不重复)。
import java.util.ArrayList;
public class fooClass {
public static void main(String[] args) {
class Utils {
public int factorial(int n) {
int p = 1;
int i = 1;
while(i <= n) {
p *= i++;
}
return p;
}
public <T> ArrayList<T[]> combinations(T[] array, int r) {
int n = array.length;
int[] vec = new int[r];
int i, j, k, m, o;
for (i = 0; i < vec.length; i++) {
//int j = vec[i];
vec[i] = i;
}
ArrayList<T[]> result = new ArrayList<T[]>();
int total = factorial(n) / (factorial(r) * factorial(n - r));
for (i = 0; i < total; i++) {
T[] combination = (T[])new Object[r];
for (k = 0; k < r; k++) {
combination[k] = array[vec[k]];
}
result.add(combination);
j = r - 1;
if (vec[j] + 1 < n) {
vec[j]++;
} else {
o = j;
while (j-- >= 0) {
if (vec[j] + 1 < n - r - (j + 1)) {
vec[j]++;
m = j + 1;
while (m++ <= o) {
vec[m] = vec[m-1] + 1;
}
break;
} //if end
} //while end
} //if-else end
}
return result;
}
};
Utils utils = new Utils();
String test = "abcde";
ArrayList<char[]> combinations = utils.combinations(test.toCharArray(), 3);
}
}
Run Code Online (Sandbox Code Playgroud)
现在问题就在我所说的线上;当我通过char[].
Utils 类型中的方法组合(T[], int) 不适用于参数 (char[], int)
解决这个问题的正确方法是什么?
我认为这是因为 char 是一种原始类型,而 T 代表一个对象。如果您使用Character[]而不是char[],它应该可以正常工作。
char[] chars = test.toCharArray();
Character[] arg = new Character[chars.length];
for (int i = 0; i < chars.length; i++)
arg[i] = chars[i];
ArrayList<Character[]> combinations = utils.combinations(arg, 3);
Run Code Online (Sandbox Code Playgroud)
这会将 char 数组中的所有字符复制到 Character 数组中,然后将其传递给该方法。