Java,创建一个StringBuffer数组

时间:2013-08-09 18:20:49

标签: java arrays sorting

我遇到了Java问题。

假设n是一个整数,我想创建一个StringBuffer数组,其中包含字母表中所有26 ^ n个字母组合,以及字典顺序。我获得了ArrayIndexOutOfBoundsException。

我写了这堂课:

public static StringBuffer[] creaTabellaTotale(int n, char[] a) {   


     StringBuffer[] tabella = new StringBuffer[ pow(26, n)];
     for(int w =0; w < pow(26, n); w++)
         tabella[w] = new StringBuffer("");

     for(int h = 1; h <= n ; h++){
        for(int u =0; u < pow ( 26, h-1); u++){

        for (int j = 0; j<26; j++){

            for( int x =pow(26, n-h+1)*u + pow(26, n-h)*j; x< pow(26, n-h+1)*u + pow(26, n-h)*(j+1); x++)
                tabella[x] = tabella[x].append(a[j]);
        }

        }

     }

     return tabella;
 }

这里a []是一个按字母顺序包含26个字母的数组;我重写了pow(),它的原型是int pow(int b,int e)。我无法找到错误。

2 个答案:

答案 0 :(得分:3)

在上一个 for

for( int x =pow(26, n-h+1)*u + pow(26, n-h)*j; x< pow(26, n-h+1)*u + pow(26, n-h)*(j+1); x++)
            tabella[x] = tabella[x].append(a[j]);

您尝试使用索引比数组访问阵列。你可能没有意识到,但 int x 在这里变得比你的数组更大:

x =pow(26, n-h+1)*u + pow(26, n-h)*j

修改

正如@d'large'cop在评论中所说:你的数学运算是错误的

答案 1 :(得分:1)

我建议使用递归而不是正常的迭代;代码更清晰,更短 - 更容易发现错误。

String[] alphabet = { "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" };
final int amount = 26; //alphabet.size()
StringBuffer[] foo = new StringBuffer[pow(amount, n)];
long counter = 0;

public void recursion(int depth, StringBuffer actual)
{
    String a = actual.toString();
    for (int i = 0; i < amount; i++)
    {
        foo[counter++] = new StringBuffer(a + alphabet[i]);
        if (depth != 1)
            recursion(depth - 1, new StringBuffer(a + alphabet[i]));
    }
}

只需致电recursion(n, "")