2015-10-07 33 views
1

我是Ruby新手,試圖找出一個在線測試問題。問題如下:Ruby Anagram比較模塊

字謎是從另一個形成一個字使用的所有原始字母恰好一次重新安排其信件, ;例如,管弦樂團 可以重新安排成車馬。

編寫一個函數,檢查兩個單詞是否是彼此的字謎。

例如,AreAnagrams.are_anagrams?('momdad','dadmom')應爲 返回true,因爲參數是anagrams。

的代碼我想出了是這樣的:

module AreAnagrams 
    def self.are_anagrams?(string_a, string_b) 
     ## Create @word1 variable to store string_a 
     @word1 = string_a 

     ## Create @word1_compare variable to store string_a in lower case 
     @word1_compare = @word1.downcase 

     ## Create @word2_compare variable to store string_b 
     @word2 = string_b 

     ## Create @word2_compare variable to store string_b in lower case 
     @word2_compare = @word2.downcase 

     ## Check length of @word1 and @word2 to make sure they are the same length 
     if @word1.length == @word2.length 

     =begin 
     Sort the letters of the @word1 and @word2 variables and compare 
     them to see if they are anagrams 
     =end 

     if @word1_compare.chars.sort.join == @word2_compare.chars.sort.join 
      puts "#{@word1} and #{@word2} are anagrams!" 
     else 
      puts "#{@word1} and #{@word2} are not anagrams!" 
     end 
     else 
      puts "#{@word1} and #{@word2} are not anagrams!" 
     end 
    end 
end 

當我提交的代碼,我得到以下從測試回:

編譯OK,但4出4測試用例失敗

樣本案例:錯誤答案

詞具有獨特的字母:錯誤答案

詞重複的字母:錯誤答案

一個字一個字的前綴:錯誤答案

我已經測試我的代碼以多個字符串,它似乎工作很好。它看起來像是希望我檢查更具體的實例(特殊字符,帶有重複字母的單詞等),但這真的是必需的嗎?對不起,如果這是一個愚蠢的問題,我是Ruby的新手,並失去了。

任何幫助將不勝感激!

+1

既然這是一個類方法,你應該*真的*避免在這裏使用實例變量。這些將持續在方法的調用之間,這可能是你不想要的。只需使用常規的局部變量,不需要「@」。 – tadman

+0

聽起來不錯,我也會改正我的變數。非常感謝,再次感謝你! – Bryan

+2

@tadman回答了您的問題,但您可以採取一些措施來改進您的方法。 1,問題並不要求你「放」,所以你應該刪除它。 2.當你想返回一個結果(例如'true'或'false')並且'puts'結果時,通常最好的方法是'puts'。這使得該方法更通用,如果您想在程序中的其他地方再次使用它,並且沒有或不同的'puts'消息... –

回答

2

我認爲這裏的問題是您正在顯示一條消息,但沒有返回預期值爲truefalse的值。

在每個puts之後,包括相應的答案。這樣你的方法會返回一些有用的東西。現在我假設所有情況下都是nil,因爲這就是puts返回的結果。

+0

現在你已經確定了這個問題,也許幾句話就可以改善代碼...... –

+0

@CarySwoveland我認爲這很清楚。所有需要做的是在每次投入後添加「true」或「false」。 – tadman

+0

使用臨時變量,使用實例變量,在方法內部放置「puts」等。 –