1

我的程序的一部分有问题。

在下面的代码中,我们的字母表中有 27 个字母。

目的是:对于外部 的每次重复for,我们取 的最后一个n字符text_generated,并且对于字母表中的每个字母,我们计算通过将字符添加到 的最后一个字符而获得的字符的text_formatted出现次数;然后我们选择出现次数最多的字母并将其附加到. 我得到的结果是这样的:n+1ntext_generatedtext_generated

***aaaaaaaaaaaaaaaaaaa

为什么?

编码:

        int index;
        int[] occurrences = new int[27];
        int count;
        for(int a = 0; a < m; a++){     // m is the number of characters the user wants to add              

            for(int b = 0; b < 27; b++){
                StringBuffer curr_word = new StringBuffer(text_generated.substring(text_generated.length()-n, text_generated.length()));
                count = 0;
                for(int c = 0; c <= text_formatted.length() -n-1;c++){
                    if(text_formatted.substring(c,c+n+1).equals(curr_word.append(array[b])))
                    count += 1;
                }
                occurrences[b] = count;
            }

            index = 0;
            for(int d = 1; d < 27; d++){
                if(occurrences[d] > occurrences[index])
                    index = d;
            }

            text_generated = text_generated.append(array[index]);

        }
4

2 回答 2

3

你总是设置你的index = 0,所以选择 array[] 中的第一个字母,它总是a

于 2013-08-21T15:12:28.030 回答
1

你得到的结果***aaaaaaaaaaaaaaaaaaa和这个循环

index = 0;
for(int d = 1; d < 27; d++){
  if(occurrences[d] > occurrences[index])
    index = d;
}

表示出现数组中的每一项都是 0。这意味着您的算法默认附加array[0]text_generated字符串。这意味着问题出在这个块中

for(int c = 0; c <= text_formatted.length() -n-1;c++){
  if(text_formatted.substring(c,c+n+1).equals(curr_word.append(array[b])))
    count += 1;
}

可能出现的问题:

  • 从不进入循环,text_formatted.length() - n - 1结果为负值。
  • if总是评估为false

在这两种情况下,问题很可能与 和 的值n有关text_formatted

于 2013-08-21T16:03:50.983 回答