Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
所有可能组合的java列表生成器_Java - Fatal编程技术网

所有可能组合的java列表生成器

所有可能组合的java列表生成器,java,Java,我想创建一个函数,该函数将列出java中长度n和n+m之间的字符集的所有可能组合。 我试图演示散列破解是如何工作的,我被要求用java编写,但我对它不是很熟悉。 我还想知道java中是否有类似python yeald函数的东西,如果有,我如何添加它。如果此示例对您有帮助,请尝试。它包含3个变量:字符集、最大和最小长度,并列出所有组合 import java.util.Arrays; public abstract class Main { int max = 4; int mi

我想创建一个函数,该函数将列出java中长度n和n+m之间的字符集的所有可能组合。 我试图演示散列破解是如何工作的,我被要求用java编写,但我对它不是很熟悉。
我还想知道java中是否有类似python yeald函数的东西,如果有,我如何添加它。

如果此示例对您有帮助,请尝试。它包含3个变量:字符集、最大和最小长度,并列出所有组合

import java.util.Arrays;

public abstract class Main {
    int max = 4;
    int min = 2;

    public static void main(String args[]) {
        new Main() {
            public void element(char[] result, int offset, int length) {
                System.out.println(new String(result, offset, length));
            }
        }.generate("ABCD");
    }

    private void generate(char[] input) {
        char[] result = new char[input.length];
        int[] index = new int[input.length];

        // initialize the arrays.
        Arrays.fill(result, 0, result.length, input[0]);
        Arrays.fill(index, 0, index.length, 0);

        // loop over the output lengths.

        for (int length = min; length <= max; length++) {
            int updateIndex = 0;
            do {
                element(result, 0, length);

                // update values that need to reset.
                for (updateIndex = length - 1;
                     updateIndex != -1 && ++index[updateIndex] == input.length;
                     result[updateIndex] = input[0], index[updateIndex] = 0, updateIndex--)
                    ;

                // update the character that is not resetting, if valid
                if (updateIndex != -1) result[updateIndex] = input[index[updateIndex]];
            }
            while (updateIndex != -1);
        }
    }

    void generate(String input) {
        generate(input.toCharArray());
    }

    public abstract void element(char[] result, int offset, int length);
}

你可以试试

我以前不知道Python中的
yield
(我想这就是你的意思)。如果我理解正确,我应该说Java中的流就像从
yield
获得的生成器。PS我不理解关于n和n+m之间的字符集的部分。当然,编写一个生成器不需要流,这是一个有很多选择的方法。我没有任何可以工作的方法,但我希望得到一些帮助,一个可以开始的地方,因为我不明白如何能够生成一个函数,可以生成一个字符集的所有可能组合,无论我输入的长度如何。我知道如何使用嵌套for循环,但我需要每个位置都有一个for循环(对于长度n,我需要n个循环)。@AgataB,我肯定你的意思是“我们不为你编写代码…”Lendion,你现在在错误的位置。首先,使用您最喜欢的搜索引擎查找关于在Java中生成组合的已经编写的内容,我向您保证,这些内容非常多,足以让您开始编写一些代码。如果您在某一点上陷入困境或代码出现错误,我们将在这里提供帮助,保证。@OleV.V。对那个为疏忽道歉。这显然有效。有时我觉得代码很复杂,很难阅读和理解。如果你对递归感到满意,我会用它来代替。
AA
AB
AC
AD
BA
BB
BC
BD
CA
CB
CC
CD
DA
DB
DC
DD
AAA
AAB
AAC
AAD
ABA
ABB
ABC
ABD
ACA
ACB
ACC
ACD
ADA
ADB
ADC
ADD
BAA
BAB
BAC
BAD
BBA
BBB
BBC
BBD
BCA
BCB
BCC
BCD
BDA
BDB
BDC
BDD
CAA
CAB
CAC
CAD
CBA
CBB
CBC
CBD
CCA
CCB
CCC
CCD
CDA
CDB
CDC
CDD
DAA
DAB
DAC
DAD
DBA
DBB
DBC
DBD
DCA
DCB
DCC
DCD
DDA
DDB
DDC
DDD
AAAA
AAAB
AAAC
AAAD
AABA
AABB
AABC
AABD
AACA
AACB
AACC
AACD...