0

以下のコードを書きましたが、正しく実行されるはずだと推測できますが、正しく実行されず、頭を壁にぶつけています。一時ベクトル リストに追加するオブジェクトを見つけた後に私がやろうとしているのは、ベクトル リストをループして各ファイル名を取得し、単語の出現回数をカウントすることです。両方のコードを別々に動作させることはできますが、それらを組み合わせると、一時ベクトル リストがいっぱいになった後にコードの実行が停止します。以下の私のコードから、残りのコードの実行を妨げているものを誰でも見ることができますか?

編集されたコード >> コードをいくつか変更して正しくフォーマットし、重複を削除しましたが、画面に何も出力されません。単純なことだと思いますが、それを見ることができないようです。

                    for(int m = 0; m < temp.size() && occurCount < wordCount;m++)
                    {
                    File aFile2 = new File(temp.elementAt(m));
                    FileReader aFileReader = new FileReader(aFile2);
                    BufferedReader aBufferReader = new BufferedReader(aFileReader);

                    while((line = aBufferReader.readLine()) != null && occurCount < wordCount)
                    {

                        words  = line.toLowerCase().split(" ");
                        if (line == null)
                            break;
                        else 
                        {
                            for(int k = 0; k < words.length && occurCount < wordCount;k++)
                            {
                                if(words[k].matches(wordToSearch))
                                {
                                    occur++;

                                    q.add(words[k]);

                                }
                                else if(words[k].matches(pattern))
                                {
                                    System.out.println(words[k]);

                                        if(temp.contains(words[k]))
                                            System.out.println("Word already in list");
                                        else
                                        {
                                            temp.add(words[k]); 
                                        }

                                }


                            }
                        }
                        lineFile = "";  


                    }
                    occurCount = occur;
                    occur = 0;
                    aBufferReader.close();
                    searched.add(temp.elementAt(m));
                    occurCount2 += occurCount;
                    //occurCount += occurCount;



                   System.out.println(occurCount);
                   System.out.println(q);
                   System.out.println(temp);
                   System.out.println(searched);
4

2 に答える 2

1
                char aChar = 'x';
                for (int i = 0; i <= line.length()-1; i++) 
                {
                    aChar = line.charAt(i);
                    lineFile += aChar;
                }

                words = lineFile.split(" ");
                if (line == null)
                    break;
                lineFile = "";  

次と同じです。

               words = line.split(" ");

                for(int k = 0; k <= words.length - 1;k++)
                {
                    if(words[k].matches(pattern))
                    {
                        System.out.println(words[k]);
                        if(!searched.contains(words[k]))
                        {
                            if(temp.contains(words[k]))
                                System.out.println("Word already in list");
                            else
                            {
                                temp.add(words[k]); 
                            }
                        }
                    }

for (int i = 0; i < n; i++)の代わりに通常使用し<= n - 1ます。

temp.add を使用しましたが、これはおそらくsearched.add である必要があります。そうしないと、外側のループが延々と続きます: ( for ... < temp.size())

                for (String word : words)
                {
                    if (word.matches(pattern))
                    {
                        System.out.println(word);
                        if (!searched.add(word))
                            System.out.println("Word already in list");
                        }
                    }

add単語が既にセットに含まれている場合は false を返します。

wordsのようにジェネリック型である必要がありSet<String>ます。

于 2012-12-01T10:44:39.753 に答える
0

まず、コードをリファクタリングします。よく考えて、もう少し上手に書こうと思います。例えば以下の部分

line = line.toLowerCase();
char aChar = 'x';
for (int i = 0; i <= line.length()-1; i++) {
    aChar = line.charAt(i);
    lineFile += aChar;
}

words  = lineFile.split(" ");

として書き換えることができます

words = line.toLowerCase().split(" ");

そして、コードの同じ部分が 2 回書かれています - それらをいくつかのメソッドに抽出します。

あなたのコードにはそれ以上のものがあると思います。入手したら、関連する部分をここに貼り付けてください。

于 2012-12-01T10:39:48.827 に答える