0

さて、指定された文字で可能なすべての値を持つ文字列を生成する方法に行き詰まりました。さて、うまく説明できないので、例を次に示します。

文字:a, b, c

世代:

abc
aab
abb
acc
baa
bbb
bbc
bac
cab
ccc
aaa
cbb
caa
ccb
cca
bab
bcb

文字リストを使用して、このリストのすべての文字を繰り返し、リストのすべての文字をもう一度繰り返してみましたが...うまくいかなかったとしましょう。

4

2 に答える 2

3

この質問に対する私自身の回答からのコピー:

これは、a,b,cまたはその他の連続した文字列に対して機能します。

import java.util.Arrays;
import java.util.Iterator;

public class BruteForceIterator implements Iterator<String> {

    private char min, max;

    private char[] current;

    private char[] last;

    private int reachedLast = 0;

    public BruteForceIterator(char min, char max, int length) {
        this.min = min;
        this.max = max;
        current = new char[length];
        Arrays.fill(current, min);
        last = new char[length];
        Arrays.fill(last, max);
    }

    @Override
    public boolean hasNext() {
        return reachedLast < 2;
    }

    @Override
    public String next() {
        String str = new String(current);
        for(int i = current.length - 1; i >= 0; i--) {
            char next = following(current[i]);
            current[i] = next;
            if (next != min) {
                break;
            }
        }
        if (Arrays.equals(current, last) || reachedLast > 0) {
            reachedLast++;
        }
        return str;
    }

    private char following(char in) {
        if (in < max) {
            return (char) (in + 1);
        } else {
            return min;
        }
    }

    @Override
    public void remove() {
        throw new UnsupportedOperationException("No with me, sir!");
    }

    public static void main(String[] args) {
        BruteForceIterator bit = new BruteForceIterator('a', 'c', 3);
        while (bit.hasNext()) {
            System.out.println(bit.next());
        }
    }
} 
于 2013-03-16T20:45:01.943 に答える
1

私はすぐにこのコードを以下に作成しました。それが機能するように、またはニーズに合わせて調整するために、少し編集する必要があるかもしれません。私のコードのアイデアをあなたと共有したかっただけです。ただし、より効率的なため、jlordoの回答をお勧めします。

Array String[] = new Array[]{"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"}
ArrayList<String> numbersrandom;
for(int a = 0; i <= 26; i++){
for(int b = 0; i <= 26; i++){
for(int c = 0; i <= 26; i++){
numbersrandom.add(String[a]+String[b]+String[c]);
}
}
}

このコードを使用した後、ランダム ジェネレーターと for ループを使用して、これらをランダムに混合できます。幸運を!

于 2013-03-16T20:51:37.467 に答える