2012-10-07 39 views
1

有問題的方法如下。這種方法應該採取一個字符串,並使用bag adt返回一個項目的頻率。我有它的工作,但是,如果我(例如)進入「測試」,它將顯示輸出T,S和T與他們各自的(儘管是正確的)頻率。但是,我希望輸出只是T,S的頻率。如何查找已經打印的元素並從打印中跳過它們?

public int getFrequency(String str){ 
     int index=0; 
     char[] nArray = new char[sArray.length]; 

     for(int i=0;i<sArray.length; i++){ 
      char a = sArray[i]; 
      String s = Character.toString(a); 
      index = consonants.getFrequencyOf(s); 
      if(index != 0 && consonants.contains(s)==true){ 
       for(int x=0;x<nArray.length;x++){ 
        if(nArray[i] == sArray[x]){ 
         continue; 
        } 
        else{ 
         System.out.print(s + ": "); 
         System.out.println(index); 
         nArray[i] = sArray[i]; 
         break; 
        }  
       } 
      } 
     } 
     return index; 
    } 
+0

聲明'x','sArray'和'consonants'在哪裏? –

+0

該功能沒有多大意義。你從來沒有真正使用'str',我猜想它被翻譯成'sArray'在別的地方。您返回的'index'值只適用於最後一個字符。 – pickypg

回答

0

你還是使用HashMap,將字符存儲與他們的correspondin頻率: -

public Map<Character, Integer> getFrequency(String str){ 

    String vowels = "aeiouAEIOU"; 
    Map<Character, Integer> freqMap = new HashMap<Character, Integer>(); 

    for(int i=0;i<str.length(); i++) { 

     char ch = str.charAt(i); 

     // If character is a not consonant.. continue with next iteration 

     if (vowels.contains(ch)) { 
      continue; 
     } 

     Integer val = freqMap.get(ch); 

     if (val != null) { 
      // Put new entry in Map.. With character and count = 1 

     } else { 
      // Increment val by 1, and update the map for this character 
     } 

    } 
    return freqMap; 
} 

謹此確認你的代碼: -

index = consonants.getFrequencyOf(s); 
if(index != 0 && consonants.contains(s)==true){ 

第2條件看起來對我來說很模糊。因爲如果index !=0,那麼這意味着consonants包含s ..那爲什麼要再檢查一次?

或者,您的getFrequencyOf(s)正在做其他事情而不是檢查遏制措施,我們看不到?

+0

注意:我使用hashmaps,arraylists和數組來處理這個程序時沒有問題。但是,我需要使用Bag ADT(輔音變量在我的代碼中) – steverngallo

+0

@steverngallo ..然後在添加到HashMap之前檢查輔音..不要添加它們.. –

+1

沒有必要寫'new Character(a )'。這是自動裝箱的工作。 –

0

我認爲問題在else塊中。無論如何你都會得到它。但是隻有在週期結束時才需要獲取它。您應該像這樣重寫內部循環:

   public int getFrequency(String str){ 
        char[] sArray = str.toCharArray(); 
        char[] nArray = new char[sArray.length]; 
        int[] fArray = new int[sArray.length]; 

        for(int i=0; i < sArray.length; i++){ 
         char a = sArray[i]; 
         String s = Character.toString(a); 

         if(consonants.contains(s)==true){   

          for(int x=0; x <= i; x++){ 
           if(nArray[x] == sArray[i]){ 
            fArray[x]++; 

            break; 
           } 

           if (x == i){ 
            nArray[i] = sArray[i]; 
            fArray[i] = 1; 
           }  
          }     
         } 
        }   

        for (int k = 0; k < fArray.length; ++k){ 
         if (nArray[k] == 0){ 
          continue; 
         } 

         System.out.println(String.valueOf(sArray[k]) + ": " + String.valueOf(fArray[k])); 
        } 

        return fArray[fArray.length - 1]; 
       } 
+0

此代碼不輸出任何內容。 – steverngallo

+0

是的,有一個錯誤(她的'fArray [fArray.length - 1]')。我修復了一個錯誤並更新了代碼。 –