2012-03-08 51 views
0

编辑注意:我没有很清楚。我试图从一个单一的字符猜测开始,比如0到00到000 ...一直到zzzzzz。基本上,所有可能的迭代从0到zzzzzz。对不起,我不是很清楚!增加一个字符串/字符数组

我目前正在尝试循环访问一组字符。该数组包含0-9和a-z(小写)。诚然,这是作业 - 我是一个无用的编码器(请参阅前一篇文章),我可以做一些帮助。

我要的是通过字符数组的所有可能的结果进行迭代,并列出结果...

aaa    aba 
aab > through to > aca 
aac    ada 

如果只是基于信我读过,我可以将它基于base26数字系统,但这包括数字。

到目前为止,我已设法循环访问数组,在循环访问下一个位置之前将答案分配给“猜测”数组。之后,我很难过。

任何建议,作为最后一次,非常感谢。这项工作基于Brute Force,但如果我的真实目的是非法的,那么我可以使用大量的工作示例,但事实并非如此。

这是我到目前为止。

/** 
* 
* @author Aaron 
*/ 
public class Test { 

    /** 
    * @param args the command line arguments 
    */ 
    int current = 0; 
    char[] guess = new char[6]; 

    public static void main(String[] args) { 
     Test test = new Test(); 
     int maxLength = 6; 
     char c = '0'; 

     while (maxLength != 0) { 
      maxLength--; 
      test.iterateAll(c); 
      test.increment(c);    
     } 
    } 

    public void iterateAll(char c) { 
     char[] charset = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
          'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 
          'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 
          'u', 'v', 'w', 'x', 'y', 'z'}; 
     for (int i = 0; i < charset.length; i++) { 
      //c = charset[i]; 
      guess[current] = charset[i]; 
      System.out.println(guess); 
     } 
    } 

    public void increment(char c) { 
     current++; 
    } 
} 
+0

你的想法使用基地26是好的,事实上,你也有数字只是意味着你应该去基地36代替。 FauxFaux的答案似乎使用了这个事实。 – ARRG 2012-03-08 23:39:49

回答

1

您能使用Integer.toString()吗?如果是这样,它愿意为你做大部分工作。以下内容打印aaa,aab,aac等。

final int start = 36*36*10 + (36*10) + 10; 
for (int i = start; i < 36*36*36; ++i) { 
    final String base36 = Integer.toString(i, 36); 
    final String padded = String.format("%3s", base36).replace(' ', '0'); 
    System.out.println(padded); 
} 
+0

我没有想过基地36,但这是一个很好的答案!你能解释一下这个例子的数学吗?为什么启动变量129970?为什么我们需要36 * 36 * 36?我希望能够增加到六个字符,所以我会将它改为36 * 36 * 36 * 36 * 36 * 36?谢谢! – Rookie 2012-03-09 10:15:46

+0

起始号码是aaa,'10'表示'a','36'是字母表的大小;在base-'10'中得到一系列'3','333',我们会做(10 * 10 * 3 + 10 * 3 + 3)? – FauxFaux 2012-03-09 13:01:26

0

我会使用StringBuilder作为“操纵”字符级别的字符串。这里它刚刚起来,在pos“寄存器”中从左到右带有值,它们只是索引字符序列。还要注意字符只是一种数字,所以可以在循环中用作文字。

char[] seq = new char[36]; 
int i = 0; 
for (char c = '0'; c <= '9'; c++) { 
    seq[i++] = c; 
} 
for (char c = 'a'; c <= 'z'; c++) { 
    seq[i++] = c; 
} 

int length = 3; 
StringBuilder builder = new StringBuilder(" "); 

int[] pos = new int[length]; 
int total = (int) Math.pow(seq.length, length); 
for (int count = 0; count < total; count++) { 
    for (int x = 0; x < length; x++) { 
     if (pos[x] == seq.length) { 
      pos[x] = 0; 
      if (x + 1 < length) { 
       pos[x + 1]++; 
      } 
     } 
     builder.setCharAt(x, seq[pos[x]]); 
    } 
    pos[0]++; 

    System.out.println(builder.toString()); 
} 
相关问题