这里的codecademy错了吗?

时间:2014-01-17 22:51:25

标签: ruby

CodeAcademy的错误:哎呀,再试一次。看起来你的方法在没有接收到第二个参数时不会默认按字母顺序排列数组。

    def alphabetize(arr, rev=false)
    if rev == true
        arr.sort! { |item1, item2| item2 <=> item1 }
    else 
        arr.sort! 
    end
    puts arr
end

alphabetize(["a", "b", "c", "d", "e"])

编辑: 以下是本节的目标(对不起,最初不包括):

  

1)在方法中添加if / else语句。如果rev是真的,那就是   应按字母顺序对数组进行排序;如果rev是假的(哪个   如果用户传递false或未传递rev参数,则会发生   它应该按字母顺序对数组进行排序。

     

2)在方法之外,放置已排序的数组。 (这是你可以看到的   你方法所做的所有精细工作。)

     

3)在您选择的数组上调用您的方法以查看它的实际效果!

3 个答案:

答案 0 :(得分:4)

  

2)在方法之外,放置已排序的数组。

不在内,就像你一样。 puts arr返回nil,codeacademy想要数组作为返回值。外面你应该puts从这个方法返回值:

def alphabetize(arr, rev=false)
    if rev == true
        arr.sort! { |item1, item2| item2 <=> item1 }
    else 
        arr.sort! 
    end
    arr
end

puts alphabetize(["a", "b", "c", "d", "e"])

PS。正如Wayne Conrad在评论中指出的那样,sort!修改你的数组。

arr1=[2,3,1,5,22]
# => [2, 3, 1, 5, 22]
alphabetize arr1
# => [1, 2, 3, 5, 22]
arr1
# => [1, 2, 3, 5, 22] # you didn't want this array changed, right?

如果您不希望更改数组,则应使用不更改数组的普通sort !也知道 bang 建议使用危险方法,在这种情况下它会修改数组。

答案 1 :(得分:0)

尝试将数组作为返回值添加到函数中。

答案 2 :(得分:0)

您不需要包含if / else语句。 我运行了这段代码,Codecademy接受了它。 您应该在调用方法后返回有序数组,然后在控制台中puts结果。

def alphabetize(arr, rev=false)
  arr.sort!
  return arr
end

puts numbers

numbers = [2,1,9,3]
alphabetize(numbers)