增加字符串/字符数组

时间:2012-03-08 21:32:49

标签: java loops iteration

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

我正在尝试循环播放一系列字符。该数组包含0-9和a-z(小写)。不可否认,这是作业 - 我是一个无用的编码器(见上一篇文章),我可以做一些帮助。

我想要的是迭代char数组的所有可能结果并列出结果......

aaa                aba
aab > through to > aca
aac                ada

如果它只是基于我读过的字母,我可以将它建立在base26号码系统上,但这包括数字。

到目前为止,我已经设法循环遍历数组,在下一个位置循环之前将答案分配给'guess'数组。在那之后,我很难过。

任何建议,如上一次,非常感谢。这项工作以蛮力为基础,但如果我的真正目标是非法的,那么我可以使用大量工作实例,但事实并非如此。

这是我到目前为止所拥有的。

/**
 *
 * @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++;
    }
}

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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());
}