2016-04-03 20 views
0

私は母音の母音を反復してすべての文字を前方に移動し、文字列"eioua"を返しています。これは私のコードです:私は私のメソッドにパラメータとして"aeiou"を渡すとRubyの繰り返し文字列

def vowel(letter) 
    vowels = "aeiou" 
    string = "" 
    index = 0 
    while index < letter.length 
    current_id = vowels.index(letter) 
    next_vowel = vowels[current_id + 1] 
    string += next_vowel 
    index += 1 
    end 
    string 
end 

、それだけで"a"を取り、"eeeee"を出力します。

vowel("aeiou") # => "eeeee" 
+0

ご質問はありますか? – sawa

答えて

2

あなたはいつもコードがeaの隣)5回を追加だからこそ、インデックスcurrent_id = vowels.index(letter)(1つずつ増加。)によって発見、母音を追加しています。 index変数はループカウンタとしてのみ使用されます。

は、このコードの別の不具合があります:letterは最後の1である場合には、current_idは、最後の文字のインデックスがあるとvowels[current_id + 1]nilです。

説明と予期した結果が一貫していないため、この問題の解決策を提示できません。「すべての文字を前方に移動する」と入力すると"eioua"が生成されません。

+0

ああ、私は1つの手紙を意味するわけではありませんでした - 私はそれぞれの母音が右の次の母音になるので、 "a"は "e"になり、 "u"は "a"になります。私は母音[current_id + 1]が無限になることにも気づいたが、なぜあなたは精巧にできますか?役に立つフィードバックをありがとう! –

+1

'current_id'が最後の文字のインデックスであるとき、' current_id + 1'は文字列の長さよりも大きいインデックスです。つまり、それは存在しないインデックスです。 '' abc '[3] 'は例えば以下のようになります。 'nil'。 – mudasobwa

1

あなたが単語の文字を回転させ(所定の位置に単語を修正するとは対照的に、新しい単語を形成)したい場合は一つの方法は次のとおりです。

str = "aeiou" 

new_str = str.chars.rotate.join. #=> "eioua" 
str        #=> "aeiou" 

あなたが代わりに文字列を変更したい場合:

str.object_id.      #=> 70128532752540 
str.replace(str.chars.rotate.join) #=> "eioua" 
str        #=> "eioua" 
str.object_id      #=> 70128532752540 
+1

これははるかに良い方法です。 Rubyにはこれらの短いEnumeratorベースのメソッドがあり、それらを併用することができれば本当に素晴らしい方法です。 – tadman

関連する問題