Java 重构置换查找

Java 重构置换查找,java,refactoring,Java,Refactoring,我试着重构这段代码几个小时 for (int i = 1; i <= 10; i++) { for (int ii = 2; ii <= 10; ii++) { if (ii > i) { for (int iii = 3; iii <= 10; iii++) { if (iii > ii && iii > i) {

我试着重构这段代码几个小时

for (int i = 1; i <= 10; i++) {
        for (int ii = 2; ii <= 10; ii++) {
            if (ii > i) {
                for (int iii = 3; iii <= 10; iii++) {
                    if (iii > ii && iii > i) {
                        for (int iiii = 4; iiii <= 10; iiii++) {
                            if (iiii > i && iiii > ii && iiii > iii) {
                                for (int iiiii = 5; iiiii <= 10; iiiii++) {
                                    if (iiiii > i && iiiii > ii && iiiii > iii && iiiii > iiii) {
                                        FileUtils.writeStringToFile(file, i + " " + ii + " " + iii + " " + iiii + " " + iiiii + "\n", true);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
for(int i=1;i){
对于(int iiii=4;iiii i&iiii>ii&iiii>iii){
对于(int iiiii=5;iiiii i&iiiii>ii&iiiii>iii&iiiii>iii&iiiii>iiii){
FileUtils.writeStringToFile(文件,i+“”+ii+“”+iii+“”+iiii+“”+iiiii+“”+iiiii+“”,true);
}
}
}
}
}
}
}
}
}

我们的目标是得到两个输入整数(循环数(本代码中为5)和一个数字的最大值(本例中为10),但我没有ide如何做到这一点。对不起,我的英语不太好。这对我的家庭作业有很大帮助。

要得到一个可变的循环数,需要使用递归。类似这样的东西

public static void combine(int values, int maximum, Consumer<int[]> consumer) {
    combine0(0, values, 1, maximum-values+1, new int[values], consumer);
}

static void consumer0(int index, int values, int min, int max, List<Integer> ints, Consumer<List<integer>> consumer) {
    if (index == values) {
        consumer.apply(ints);
        return;
    }
    for(int i = min; i <= max ; i ++) {
        ints[index] = i;
        comsumer0(index+1, values, min+1, max+1, ints, consumer);
    }
} 
公共静态无效组合(int值、int最大值、使用者){
组合0(0,值,1,最大值+1,新整数[值],消费者);
}
静态无效使用者0(整数索引、整数值、整数最小值、整数最大值、列表整数、使用者){
如果(索引==值){
消费者。申请(ints);
返回;
}

对于(int i=min;i这是很多i:-)我认为代码很漂亮!它看起来像是一个5位数的十进制数字,每个数字都比以前大。通过调整循环的起点,至少你可以摆脱所有的
if
语句。喜欢这些家庭作业问题……因为这完全是在现实生活中发生的。/t谢谢,我喜欢你思考这个问题的方式。你能帮我做数学题或组织循环部分吗?我就是想不起来。如果我真的看到一些例子,并从“啊哈时刻”开始,会更容易理解下次我可以想出一些抽象的方法。@digitalized每次该方法调用自身时,就会得到另一个嵌套循环。不,你根本不需要使用递归。我不认为这是解决这个问题的最简单方法。请看我的评论,我在那里描述了如何做。也许我应该把它变成一个答案。@DavidWallace you cou我是对的,我需要看看你的解决方案。
for (int i = 1; i <= 10; i++) {
    for (int ii = 2; ii <= 10; ii++) {
        if (ii > i) {
for (int i = 1; i < 10; i++) {
    for (int ii = i+1; ii <= 10; ii++) {