2017-05-03 4 views
-1

私はRubyで文字列を反転させる2つの方法があります。一方は真、もう一方は偽を出力しますが、両方とも私が望む応答を出力します。他の印刷が間違っている場合、なぜ1つの解決策が印刷されるのですか?

真実を示す解決策と同じ答えが得られたとしても、なぜそれが誤っていると言われますか?ここで

は、ソリューションおよびテストです:

def reverse(string) 
new = "" 
    i = 0 
    length = string.length 
    while i < length do 
    new = new.to_s + string[-1, 1].to_s 
    string.chop! 
    if i >= string.length 
     break 
    end 
    end 
    puts new 
end 

def secondreverse(string) 
    new = "" 
    i = 0 
    length = string.length 
    while i < length do 
    new = string[i] + new 
    i += 1 
    end 
    return new 
end 

は、これらのコードが機能していることを確認するためのテストです。あなたの解決策を書いた後、彼らはすべて真実を印刷するべきです。あなた#reverse機能で

puts("\nTests for #reverse") 
puts("===============================================") 
    puts(
     'secondreverse("abc") == "cba": ' + (secondreverse("abc") == "cba").to_s 
    ) 
    puts(
     'secondreverse("a") == "a": ' + (secondreverse("a") == "a").to_s 
    ) 
    puts(
     'secondreverse("") == "": ' + (secondreverse("") == "").to_s 
    ) 
puts("===============================================") 
+0

私は彼らがすべて真実を返すのを見ます。何を手に入れますか? –

+0

変数の名前として 'new'を使うのは本当に悪い考えです。最終的には、あなたの将来の自己を含めて、コードを扱う他の誰かを混乱させます。一般に、 'new_str'や遍在的な' retval'のような、より記述的な名前を使用してください。 'new.to_s + string [-1、1] .to_s'は余分な文字列に2つの' to_s 'を使用してCPU時間を無駄にしています。 'string [-1、1]'は厄介です。 'string [-1]'は同じことを行います。 –

+0

また、注意してください。あなたの最初の方法は、渡された文字列を削除することです。文字通りの文字列を渡すことはありませんが、変数を渡してからそれをチェックしてみてください。結果として、これが意図的であれば、メソッド名の最後に '!'を使用するべきです。 –

答えて

1

あなただけnewを返すべきであるとき、あなたはputs newを戻ってきています。

あなたは以下の例からもわかるように、それが画面に出力した後はnil putsリターン:

irb(main): puts 'test' 
test 
=> nil 

あなただけnewputs newを変更する場合は、期待どおり、それは動作します。

別に

あなたが明示的にreturn呼び出しを使用する必要はありません。あなたは両方の方法でこれを置き換えることができますので、Rubyでは、実行された最後の行は、返されます。

return new 

で:

new 
+0

ありがとう! @the Tin Man 私はあなたが言っていることを見ています。そして今、私はputsがスクリーンにプリントした後にどのようにnilを返すのかをよく理解しています。 また、CPU時間のコードを短縮する方法を教えてくれてありがとう。 – jafoole

0

問題がreverse方法では、あなたが値を印刷しているということですputsメソッドを使用してstdoutに戻していますが、返さない(代わりにnilを返します)。 nil == "cba"を比較すると、falseが返されます。 new変数を返さなければなりません:

関連する問題