2014-01-28 108 views
1

我學校的compsci網站上的測試儀不工作,所以我目前無法測試我的代碼。代碼中有兩個領域我有點困惑,並且非常感謝一些輸入。所以我寫的代碼如下。Java哈希表映射問題。

public int countPairs(String[] words) { 
    Set <String> pairs = new HashSet<String>(); 
    int noOfPairs= 0; 
    for (String word:words){ 
     Map noOfOccurencesOfEachLetter= getMap(word); 
     ArrayList<Integer> valuesFromFirstWord = new ArrayList<Integer>(noOfOccurencesOfEachLetter.values()); 
     Collections.sort(valuesFromFirstWord); 
     java.util.List<String> list = new ArrayList<String>(Arrays.asList(words)); 
     list.remove(word); 
     String[] oneLessWord = list.toArray(new String[words.length-1]); 
     for(String secondWord:oneLessWord){ 
      Map secondNoOfOccurencesOfEachLetter = getMap(secondWord); 
      ArrayList<Integer> valuesFromSecondWord = new ArrayList<Integer>(secondNoOfOccurencesOfEachLetter.values()); 
      Collections.sort(valuesFromSecondWord); 
      if (valuesFromFirstWord.equals(valuesFromSecondWord)){ 
       noOfPairs+=1; 
      } 

     } 


    } 
    return noOfPairs/2; 
    } 

此代碼旨在給我數組(單詞)中存在的單詞的異構對數。我寫了一個名爲getMap的方法,其外部基本上創建一個映射,其中鍵是包含在單詞中的字母表中的字母,並且值是該單詞中該字母的出現次數。

現在我的問題是:

1)該行是否爲有效的Java代碼?

ArrayList<Integer> valuesFromFirstWord = new ArrayList<Integer> 
(noOfOccurencesOfEachLetter.values()); 

或者我是否需要通過一些循環使用來創建我的字典中包含的值列表?

2)爲了避免在第二個for循環中包含相同的單詞,我創建了一個名爲oneLessWord的新數組,其中包含除初始for循環所經過的單詞之外的所有單詞元素。這三行代碼是否這樣做?

java.util.List<String> list = new ArrayList<String>(Arrays.asList(words)); 

list.remove(word); 

String[] oneLessWord = list.toArray(new String[words.length-1]); 

我將不勝感激任何反饋。

非常感謝, 朱奈德

+0

http://ideone.com/ –

+0

「我學校compsci網站上的測試程序無法正常工作,所以我目前無法測試我的代碼」所以,它不是編譯器的替代品。 – Raedwald

+6

這個問題似乎是無關緊要的,因爲OP沒有熱情或專業知識來檢查他們的代碼是否編譯。 – Raedwald

回答

1

1)這是行有效的Java代碼?或者,我是否需要通過某些循環使用來創建詞典中包含的值列表?

這很好。 Map#values()返回Collection,而ArrayListconstructor,允許您將Collection傳遞給它。

2)爲了使我不包括在第二個for循環相同的字,我創建一個名爲oneLessWord新的數組,其具有詞語的所有元件,除了對於循環初期會在字。這三行代碼是否這樣做?

是的,他們正是這樣做的。

+0

感謝幫助! – user2904796