2012-12-01 99 views
0

我已经编写了下面的代码,并且从我能猜到它应该正确执行,但它没有,并且我将我的头靠在墙上。找到要添加到临时向量列表中的对象后,我试图执行的操作是循环遍历向量列表,并取每个文件名并计算一个单词的出现次数。我可以将两段代码单独工作,但当我将它们放在一起时,代码将在临时向量列表填充后停止执行。任何人都可以从我的代码中看到什么是阻止执行代码的其余部分?代码编译但未执行Java

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); 
+4

这是很多代码。您应该尝试隔离问题并仅附加相关部分。 – amit

+0

看起来您至少要向列表添加至少一个字符串,然后为每个字符串添加您正在读取文件的列表,并将该文件中的所有单词添加到列表中,然后将列表中的每个新单词读取该文件再次等...这可能只是意味着您的程序需要很长时间才能执行。 –

+0

我也这么认为文森特,但它只是退出程序,并没有显示任何东西到控制台。我试图用缓冲区重写一次,但它给了我一个无限循环。这就是为什么我将代码分成两部分的原因。 – user1850189

回答

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>

+0

谢谢Joop,我做了一些改变 – user1850189

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(" "); 

,你写过两次相同的代码部分 - 提取到的一些方法。

我猜想你的代码中还有更多。当你拥有它,贴在这里的相关部分,我们将看到...

+0

感谢Tomas,我根据您的建议对代码进行了一些更改。 – user1850189