2015-09-11 30 views
1
class Person 
    def initialize(name) 
     set_name(name) 
    end 
    def name 
     @first_name + ' ' + @last_name 
    end 
    private 
    def set_name(name) 
     first_name, last_name = name.split(/\s+/) 
     set_first_name(first_name) 
     set_last_name(last_name) 
    end 
    def set_first_name(name) 
     @first_name = name 
    end 
    def set_last_name(name) 
     @last_name = name 
    end 
end 
male_names = %w{George Emmanuel Bruno Connel Cletus Samuel} 
female_names = %w{Joy Stella Patience Rita Rachael Ruth Elizabeth} 
puts "Please input your two names:" 
    n = gets 
    p = Person.new(n) 
    full_name = n.scan(/\w+/) 
    names = full_name.select do |name| 
     if male_names.include?(name) 
      nn=name 
      na = "Mr "+nn 
      puts "Welcome #{na}" 
     elsif female_names.include?(name) 
      na = "Ms "+name 
      puts "Welcome #{na}" 
     else puts "name not found!\nAre you sure you exist?" 
     end 
    end 

如果我進入Connel Samuel它將打印:圖了Ruby的字符串

歡迎康內爾先生 歡迎塞繆爾先生

我只是它想打印:

歡迎Connel Samuel先生。

+0

我會考慮你的變量更好的命名約定的代碼不如此可讀。此外,您未能真正使用Person類的實例(您只是在字符串輸入上進行掃描)。 – Tommyixi

回答

1

整個Person這裏的課是一個紅色的鯡魚。你在最後的印刷品中沒有使用它。你剛剛使用

n.scan(/\w+/) 

並研究你從輸入中得到的單詞。有兩個詞 - ConnelSamuel,每個都會得到他們自己的迭代。因此Welcome Mr Connel Welcome Mr Samuel


要解決它,你可以檢查第一或第二個名字是在男/女表並打印這個人的名字:

if p.name.split.find { |name| male_names.include?(name) } 
    puts "Welcome Mr #{p.name}" 
elsif p.name.split.find { |name| female_names.include?(name) } 
    puts "Welcome Ms #{p.name}" 
else 
    puts "name not found!\nAre you sure you exist?" 
end 
+0

ndn;我應該用什麼來代替'n.scan(/ \ w + /)'? – ConnelBLAZE

+0

@ConnelBLAZE,閱讀我答案的第二部分。 – ndn

+0

好吧,我現在明白了。我在教自己的紅寶石。感謝提示 – ConnelBLAZE