我已经编写了下面的代码,我可以猜测它应该正确执行,但它没有,我正在撞墙。在找到要添加到临时矢量列表的对象后,我要做的是循环遍历矢量列表,获取每个文件名并计算单词出现的次数。我可以将两段代码单独工作,但是当我将它们放在一起时,代码在填充临时向量列表后停止执行。任何人都可以从我的代码中看到什么阻止其余的代码执行?
EDITTED CODE>>我在代码中更改了一些内容以正确格式化并删除重复但现在没有输出到屏幕。我确信它很简单,但我似乎无法看到它。
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);
答案 0 :(得分: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>
。
答案 1 :(得分: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(" ");
你有两次编写相同的代码部分 - 将它们提取到一些方法中。
我猜你的代码中还有更多内容。如果有,请在此处粘贴相关部分,我们会看到......