我有一个问题,我正在努力解决。给定任意数量的数组和一个称为“特异性”的整数,我需要在数组的叉积中生成表示该点的行。数组的长度始终至少为 2,并且每个数组的最后一个值始终为空。除了每个数组中的最后一个元素外,没有其他元素为空。例如,给定数组 {1, 2, null} 和 {A, B, null},叉积实际上是:
0:1 A
1:1 B
2:1 无
3:2 A
4:2 B
5:2 无
6:无 A
7:无 B
8:无 无
因此,给定“特异性”4,例如上面列出的两个数组,它应该返回数组 {2,B}。那是容易的部分。我已经在下面的代码部分完成了这个特殊案例。但是,请考虑没有空值的组合优先的情况。现在的顺序是:
0:1 A
1:1 B
2:2 A
3:2 B
4:1 无
5:2 无
6:无 A
7:无 B
8:无 无
这是我到目前为止实现的算法。上面的第一种情况处理得很好,但我不知道如何处理第二种情况。关于“其他”条款的内容有什么想法吗?
public static String generateKeyForSource(int specificity, KeySource keySource) {
if (specificity > keySource.getNumPossibleKeys()) {
throw new IllegalArgumentException("The specificity " + specificity + " is larger than the max number of possible keys for this KeySource, which is " + keySource.getNumPossibleKeys());
}
Object[][] hierarchies = keySource.getHierarchies();
boolean combinedPrecedence = keySource.isCombinedPrecedence();
int[] indexes = new int[hierarchies.length];
int multiplier = 1;
if (!(combinedPrecedence && specificity >= keySource.getFirstSpecificityContainingNull())) {
for (int i = hierarchies.length - 1; i >= 0; i--) {
Object[] hierarchy = hierarchies[i];
int range;
if (combinedPrecedence)
range = hierarchy.length - 1;
else
range = hierarchy.length;
int currentArrayIndex = specificity / multiplier % range;
indexes[i] = currentArrayIndex;
multiplier *= hierarchies[i].length;
}
}
else {
//?????????
}
return generateKey(indexes, hierarchies);
}