2015-09-04 50 views
0

在Ruby中,我正在創建一個簡短的程序,用戶可以輸入一定數量的單詞(現在爲5),程序需要吐出單詞以字母順序返回給用戶,並且每個單詞必須從全部大寫變爲全部小寫字母。Ruby Array/Loop/.each do - 最簡單的答案

該程序只能使用像(.each do,.sort,.upcase,.downcase),數組,循環和if/else語句的方法。 NOTHING ELSE ...所以沒有索引,字典,模塊,參數等等。語法不應該和我已經寫的太多差異。

這是我到目前爲止的代碼...我不斷收到一個沒有方法的錯誤...任何幫助將不勝感激。

words = [] 

5.times do 
    puts "Please enter a word" 
    words << gets.chomp 
end 

words.sort.each do |odd, even| 
    if odd puts words.upcase 
    elsif even puts words.downcase 
    end 
end 
+1

你是什麼意思的「方法」?每當發生異常時,重要的是要確定它發生的地方。 –

+1

'words.sort'會給你和排序詞的數組。然後'each'將有序數組的每個元素傳遞給塊,並將它們分配給第一個塊變量'odd'。由於每次傳遞一個字符串,塊變量'even'將始終等於'nil'。這就是爲什麼該塊沒有按照你的意願執行。您可能會發現在塊的開頭添加以下內容會有幫助:'puts「odd =#{odd},even =#{even}」'。 –

回答

1

第一個循環,填充數組,很好。

words.sort.each do |odd, even| 
    if odd puts words.upcase 
    elsif even puts words.downcase 
    end 
end 

這是行不通的。 each從已排序的數組中取出一個單詞並將其「饋送」給該塊。該塊使用變量「奇數」。由於變量「偶數」沒有得到一個值,它將是零。

下一行紅寶石決定是否odd是真實的,因爲它不是falsenil,紅寶石決定它,所以puts words.upcase執行。 words然而,作爲一個數組,並不知道如何推理事物 - 並通過給出錯誤告訴你。

以下代碼使用變量作爲「切換」;如果關閉,則打開,反之亦然。

words = [] 

5.times do 
    puts "Please enter a word" 
    words << gets.chomp 
end 

up = true # the toggle 

words.sort.each do |word| 
    if up then 
    puts word.upcase 
    up = false 
    else 
    puts word.downcase 
    up = true 
    end 
end 
0

編輯:我還沒有看到由@steenslag後,當我張貼了這個答案,但它是在生成輸入,所以我會離開它,除非它是希望我刪除的方式略有不同,在這種情況下,我會的。

puts "Enter 5 words separated by spaces: " 
words = gets.chomp! 
results = words.split(" ").sort! 
caps = true 
results.each do |word| 
    if caps == true 
    puts word.upcase 
    caps = false 
    elsif caps == false 
    puts word.downcase 
    caps = true 
    end 
end 
0

我同意這個想法與切換是其他事情已經建議的方式。

我只想簡化擋了一下,因爲在Ruby是不需要檢查撥動明確反對truefalse,也不需要顯式更改切換到truefalse在每次迭代中,只需撥動它:

upcase = true 
words.sort.each do |word| 
    puts(upcase ? word.upcase : word.downcase) 
    upcase = !upcase 
end