2015-09-11 26 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