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,它可能应该是 search.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(" ");

而且你有两次编写相同的代码部分 - 将它们提取到某些方法中。

我猜您的代码中还有更多内容。获得后,将相关部分粘贴到此处,我们会看到...

于 2012-12-01T10:39:48.827 回答