-4

アプリケーションの文字列の「無限」リストを作成したいと思います。これを使ってみた……。

public static void runinfinite(int length) {
    String lastString= " ";
    while (true) {
        if (lastString.length() > length)
            break;
        lastString = lastString.trim();
        for (char c0 = 'a'; c0 <= 'z'; c0++) {
            lastString += c0;
            action(lastString);
        }
    }
}

それは私にこれだけを与えます: abcdefghijklmnopqrstuvwxyz. 文字列を「無限に」作成するコードのブロックを持っている人はいますか?

編集:この例のような文字列のリストを作成するために必要です:[同じ順序である必要はなく、文字列の束だけです]

編集 2:この例をより適切に機能させ、永久に実行したいと考えています。

4

3 に答える 3

1

無限の長さの文字列を作成したい場合は、最終的にスタックオーバーフロー例外を受け取ります。

同じく:

string badString = "";
Random random = new Random();
while(true)
{
  int asciiNum = random.nextInt(25) + 97;
  badString = badString + Character.toChars(asciiNum);
}

無限個の a で構成される badString が生成されますが、プログラムはメモリ不足エラーのためにクラッシュします。

詳細については、これを参照してください。

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Character.html#toChars%28int%29 http://docs.oracle.com/javase/6/docs/api /java/util/Random.html - ランダム クラス

于 2012-09-08T20:44:27.587 に答える
0

無限に実行したい場合、なぜループを壊すのですか?

if (lastString.length() > length)
    break; // <--- it stops your "infinite" loop

この行の意味は何ですか?

lastString = lastString.trim();

唯一のことは、空白文字を入力しないため、最初の割り当てから最初のスペースを削除することです。最初から空の文字列を簡単に使用できます。

関数を呼び出すときに長さパラメーターとして26未満の値を渡す可能性があるため、「z」の後に停止します。そうしないと、次の「z」の後に停止し、渡した数値よりも文字列が長くなります。

更新:最大の長さだと説明しました。では、それはどのように「無限」ですか?または、文字 'a' から 'z' で構成される文字列の "無限" リストが必要ですか? または次のパターンの「無限」リスト:

for length = 10:
list = [
"a",
"ab",
"abc",
...
"abcdefghij", // reached max length
"a",
"ab",
...
]
于 2012-09-08T20:47:48.143 に答える
0

私のコメントを参照してください。ストリームが必要なようです。

ここに例があります...

static final Iterable<Character> alphabet() {
  return new Iterable<Character>() {

    private final char[] ALPHA = new char[] {
        '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'
    };

    public final Iterator<Character> iterator() {
      return new Iterator<Character>() {

        private int cursor;

        public boolean hasNext() {
          return true;
        }

        public Character next() {
          char ch = ALPHA[cursor];
          cursor = (cursor + 1) % 26;
          return ch;
        }

        public void remove() {
          throw new UnsupportedOperationException("cannot remove from stream");
        }
      };
    }
  };
}

... と相まって:

for (final char ch : alphabet()) {
  System.out.print(ch);
}
于 2012-09-08T20:53:09.037 に答える