Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby加密程序给了我混合的结果_Ruby - Fatal编程技术网

Ruby加密程序给了我混合的结果

Ruby加密程序给了我混合的结果,ruby,Ruby,我写这个程序是为了取一个名字,颠倒名字和姓氏,把字母移一个。当我运行它时,它运行得很好,只是在最后,它用每个其他名称的别名吐出每个名称。它们似乎是指数型的,如果我有三个别名,我会得到九个结果。请帮帮我。ruby新手 @aliases = [] @real = [] def alias_machine(name) @real << name name = name.downcase name_array = name.split(' ') first_name = name_arr

我写这个程序是为了取一个名字,颠倒名字和姓氏,把字母移一个。当我运行它时,它运行得很好,只是在最后,它用每个其他名称的别名吐出每个名称。它们似乎是指数型的,如果我有三个别名,我会得到九个结果。请帮帮我。ruby新手

@aliases = [] 
@real = []

def alias_machine(name)
@real << name
name = name.downcase
name_array = name.split(' ')
first_name = name_array[1]
first_name_split = first_name.split('')
last_name = name_array[0]
new_namearray1 = first_name_split.map do |y|
vowels = ["a", "e", "i", "o", "u"]
    if y == vowels[0]
        y = "e"
    elsif y == vowels[1]
        y = "i"
    elsif y == vowels[2]
        y = "o"
    elsif y == vowels[3]
        y = "u"
    elsif y == vowels[4]
        y = "a"
    elsif y.next == "aa"
        y = "b"
    elsif y.next == vowels[1] 
        y = y.next.next
    elsif y.next == vowels[2] 
        y = y.next.next
    elsif y.next == vowels[3] 
        y = y.next.next
    elsif y.next == vowels[4] 
        y = y.next.next
    else 
        y = y.next
    end
end
last_name_split = last_name.split('')
new_namearray2 = last_name_split.map do |y|  
    vowels = ["a", "e", "i", "o", "u"]
if y == vowels[0]
    y = "e"
elsif y == vowels[1]
    y = "i"
elsif y == vowels[2]
    y = "o"
elsif y == vowels[3]
    y = "u"
elsif y == vowels[4]
    y = "a"
elsif y.next == "aa"
    y = "b"
elsif y.next == vowels[1] 
    y = y.next.next
elsif y == vowels[2]
     y.next.next
elsif y.next == vowels[3] 
    y = y.next.next
elsif y.next == vowels[4]
    y= y.next.next
else 
y = y.next 
end
end


new_namearray1 = new_namearray1.join('')
new_namearray1 = new_namearray1 + " "
new_namearray1 = new_namearray1.capitalize
new_namearray2 = new_namearray2.join
new_namearray2 = new_namearray2.capitalize
lastarray = []
lastarray[0] = new_namearray1
lastarray[1] = new_namearray2
lastarray = lastarray.join
@aliases << lastarray
end 

loop do 
p "Give us a name"
names = gets.chomp
if names == "Quit"
    p "Thanks!"
    @aliases.each do |aliases|
    @real.each do |real|
    p "#{aliases} is actually #{real}" 
    end
    end     
break
else
    alias_machine(names)
end
end
@别名=[]
@实数=[]
def别名_机器(名称)

@real对于每个名称,将实名和别名附加到每个相应的变量。当程序退出时,您将迭代这两者的组合。这样就得到了指数结果

@aliases.each do |aliases|
  @real.each do |real|
    p "#{aliases} is actually #{real}"
  end
end
您可能只需要一个带有数组的变量。可以使用以下命令存储该对:

@aliases << [name, lastarray]

非常感谢。我有点想它是在那里的最后,但不知道如何解决它!我很感激。是关键字,不能将其用作变量名。应使用替换字符,即
first_name。tr('a-z','ecdfighjoklmnpuqrstvawxyzb')
@Stefan
tr
正是此处使用的工具。这段代码非常长,令人困惑,最终它所做的只是尝试并重新实现它。至少,不要使用长而杂乱的
if
语句链,而是尝试使用哈希结构或查找表。您还应该记住,您经常可以将事物链接在一起,例如
n2=n2.join.capitalize
c=[a,b]。join
@aliases.each do |name, alias_name|
  p "#{alias_name} is actually #{name}" 
end