Увеличение массива String / Char - PullRequest
0 голосов
/ 09 марта 2012

РЕДАКТИРОВАТЬ ПРИМЕЧАНИЕ: Я не очень ясно. Я пытаюсь начать с одной догадки, например, от 0 до 00 до 000 ... вплоть до zzzzzz. В основном, все возможные итерации от 0 до zzzzzz. Извините, я не очень ясно!

В настоящее время я пытаюсь перебрать массив символов. Массив содержит 0-9 и a-z (нижний регистр). По общему признанию, это домашняя работа - я бесполезный кодер (см. Предыдущий пост), и я мог бы помочь с небольшой помощью.

Я хочу перебрать все возможные результаты массива char и вывести список результатов ...

aaa                aba
aab > through to > aca
aac                ada

Если бы это было только на основе букв, которые я прочитал, я мог бы основать их на системе счисления base26, но это включает в себя числа.

До сих пор мне удавалось циклически проходить по массиву, присваивать ответ массиву «предположения» перед циклическим переходом по следующей позиции. После этого я в тупике.

Любой совет, как и в прошлый раз, высоко ценится. Работа основана на грубой силе, но есть много рабочих примеров, которые я могу использовать, если моя истинная цель была незаконной, но это не так.

Вот что у меня есть.

/**
 *
 * @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 ]

1 голос
/ 09 марта 2012

Можете ли вы использовать 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 голосов
/ 09 марта 2012

Я бы использовал 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());
}
...