我遇到了一个问题,我需要接受用户输入,并返回任意 3 个高度的所有组合,当按照从最小到最大的顺序排列时,会产生对角线或水平线。例如,如果用户输入是 3 5 7 10 2 1 1 1,那么输出应该是
1 1 1
1 2 3
1 3 5
3 5 7
我有一些工作代码,但我的问题是得到的结果距离大于 1。到目前为止我当前的工作代码如下。
Arrays.sort(intArray);
int counter = 0;
for(int x = 0; x < intArray.length - 2; x++){
if(intArray[x] == intArray[x+1] && intArray[x] == intArray[x+2] && intArray[x] != 0){
validArray[counter][0] = intArray[x];
validArray[counter][1] = intArray[x+1];
validArray[counter][2] = intArray[x+2];
counter++;
}
if(intArray[x] < intArray[x+1]){
dif = intArray[x+1] - intArray[x];
if(dif == intArray[x+2] - intArray[x+1]){
validArray[counter][0] = intArray[x];
validArray[counter][1] = intArray[x+1];
validArray[counter][2] = intArray[x+2];
counter++;
}
}
}
for(int x = 0; x < validArray.length; x++){
if(validArray[x][0] != 0){
System.out.println(validArray[x][0] + " " + validArray[x][1] + " " + validArray[x][2]);
}
}
如果用户输入3 5 7 10 2 1 1 1 我明白
1 1 1
1 2 3
3 5 7
而不是 1 3 5。我明白为什么我的代码没有输出正确的输出,但我不确定如何对循环结构进行编码以获得所需的输出。非常感谢有关此事的任何帮助!
最佳答案
我建议您使用嵌套 for 循环评估所有可能的三元组,例如:
Arrays.sort(intArray);
final int len = intArray.length;
ArrayList<int[]> validComb = new ArrayList<int[]>();
for(int i = 0 ; i < len ; i++) {
for(int j = i+1 ; j < len ; j++) {
for(int k = j+1 ; k < len ; k++) {
int[] comb = {intArray[i], intArray[j], intArray[k]};
if(/*comb is valid*/ && /*comb is not a duplicate of another combination*/) {
validComb.add(comb);
}
}
}
}
关于java - 根据用户输入的高度JAVA获取对角线或水平线组合的总组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35761435/