Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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 使用ascii表和一个循环的Bruteforce字生成器_Java_Ascii - Fatal编程技术网

Java 使用ascii表和一个循环的Bruteforce字生成器

Java 使用ascii表和一个循环的Bruteforce字生成器,java,ascii,Java,Ascii,如何用java创建一个“单词生成器”,它提供ascii表范围内所有可能的字符组合,并且具有一定的长度或更短的长度 到目前为止,我所做的是一团乱麻,不是一个好的解决方案。它可以生成一系列字符(在本例中为48到57)中的单词,但其固定单词长度为4 for (int i = 48; i < 58; i++) { for (int j = 48; j < 58; j++) { for (int k = 48; k < 58; k++) {

如何用java创建一个“单词生成器”,它提供ascii表范围内所有可能的字符组合,并且具有一定的长度或更短的长度

到目前为止,我所做的是一团乱麻,不是一个好的解决方案。它可以生成一系列字符(在本例中为48到57)中的单词,但其固定单词长度为4

for (int i = 48; i < 58; i++) {
    for (int j = 48; j < 58; j++) {
        for (int k = 48; k < 58; k++) {
            for (int l = 48; l < 58; l++) {
                String bruteword = "" + (char) i + (char) j + (char) k + (char) l;
            }
        }
    }
}
for(int i=48;i<58;i++){
对于(int j=48;j<58;j++){
对于(int k=48;k<58;k++){
对于(int l=48;l<58;l++){
字符串bruteword=“”+(char)i+(char)j+(char)k+(char)l;
}
}
}
}

我希望你们能理解我的意思。对不起,我总是很难用英语来表达这些错误

递归在这里可能会有所帮助。假设你说
words(min,max,n)
给你一个所有单词的列表
n
长,字符在
min
max
之间。您可以这样实现:如果
n=0
,则唯一的单词是空字符串;否则,通过将每个可能的字符添加到
单词(min,max,n-1)
中,就可以生成所有单词

列出单词(字符最小值、字符最大值、整数n){
List ret=new ArrayList();
如果(n==0){
加上(“”);
返回ret;
}
for(字符串字:字(最小值、最大值、n-1)){

对于(char c=min;c递归在这里可能会有所帮助。假设您说
单词(min,max,n)
为您提供一个所有单词的列表
n
长,字符介于
min
max
之间。您可以这样实现:如果
n=0
,则唯一的单词是空字符串;否则,将每个可能的字符附加到
单词(min,max,n-1)

列出单词(字符最小值、字符最大值、整数n){
List ret=new ArrayList();
如果(n==0){
加上(“”);
返回ret;
}
for(字符串字:字(最小值、最大值、n-1)){

for(char c=min;c)(就此而言,您甚至不需要递归;您可以从基本案例列表开始,将所有这些都封装在从0到n的循环中)嘿,非常感谢。你是一个很棒的朋友。没有ArrayList,有没有可能做到这一点?我真的不需要保存这些单词,只需要对照另一个单词检查它们,然后扔掉它们。但是我真的很感谢你的努力!非常感谢。我想我会坚持迭代的解决方案。谢谢你的工作!你帮助了我有很多!Internet cookies是为您准备的。(就此而言,您甚至不需要递归;您可以从基本案例列表开始,将所有这些都封装在从0到n的循环中)嘿,非常感谢。你是一个很棒的朋友。没有ArrayList,有没有可能做到这一点?我真的不需要保存这些单词,只需要对照另一个单词检查它们,然后扔掉它们。但是我真的很感谢你的努力!非常感谢。我想我会坚持迭代的解决方案。谢谢你的工作!你帮助了我很多!网络饼干给你。
List<String> words(char min, char max, int n) {
   List<String> ret = new ArrayList<String>();
   if(n == 0) {
      ret.add("");
      return ret;
   }
   for(String word : words(min, max, n - 1)) {
      for(char c = min; c <= max; ++c) {
         ret.add(word + c);
      }
   }
   return ret;
}
List<String> words(char min, char max, int n) {
   List<String> ret = new ArrayList<String>();
   ret.add("");
   int start = 0;
   for(int length = 1; length <= n; ++length) {
      int end = ret.size();
      for(int i = 0; i < end; ++i) {
         for(char c = min; c <= max; ++c) {
            ret.add(ret.get(i) + c);
         }
      }
      start = end;
   }
   return ret;
}
void words(char min, char max, int n) {
   for(int i = 0; i <= n; ++i) {
      wordsRecursive("", min, max, i);
   }
}

void wordsRecursive(String base, char min, char max, int n) {
   if(n == 0) {
      System.out.println(base);
   } else {
      for(char c = min; c <= max; ++c) {
         wordsRecursive(base + c, min, max, n - 1);
      }
   }
}