2012-12-01 158 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