1

プログラムの一部に問題があります。

次のコードでは、アルファベットが 27 文字あります。

目的は、外側の の繰り返しごとにforの最後のn文字を取得し、アルファベットのすべての文字について、 の最後の文字に文字を追加することによって得られる文字のtext_generated出現回数をカウントすることです。次に、出現回数が最も多い文字を選択し、それを に追加します。私が得た結果は次のようなものです:text_formattedn+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;
}

は、occurrences 配列のすべての項目が 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 に答える