2016-09-24 12 views
0

引数を指定し、一致する出力を提供する必要があるこの問題を解決しようとしています。Ruby:文字列から非整数をフィルタリングする

2つの整数(iとn)をコマンドライン引数として使用します。次のn個の整数(コンマで区切られたもの)が続く標準出力にiを書きます。

出力にスペースや隠し文字を含めないでください。

例:引数:3 5出力:3,4,5,6,7,8

は、ここに私のコードです:

base_number = ARGV.shift.to_i 
iterate_number = ARGV.shift.to_i 

if iterate_number < 0 
    base_number = base_number.to_s 
    iterate_number = iterate_number.to_s 
else 
    print base_number 
    iterate_number.times do 
    base_number = base_number + 1 
    print ',' 
    print base_number 
    end 
end 

これまでのところ、私はしましたテストの7/9を捕まえることができました。これには、iterate_numberが負の場合も含まれ、出力は空白になります。

最後の2つのテストには、変数iが0を返して解決する文字または空白の引数が含まれ、空白の代わりに出力が0になります。

ありがとうございます!

+0

詳細: 'base_number、iterate_number = ARGV.map(&:to_i)'と書くことができます。 –

答えて

2

あなたはtimesと正しい軌道に乗っているが、あなたは、Rubyの重要な機能の一つを逃している:列挙子を活用し、配列のように、それを処理します。例えば

i = ARGV[0].to_i 
n = ARGV[1].to_i 

puts (i..i+n).to_a.join(', ') 

これは、単純な範囲を設定し、値の配列に変換し、次いで、これらの値を一緒に接合します。整数に変換するとき、それは同じだ場合

value.to_i.to_s == value 

をし、整数値であることが保証の背中:あなたは値が「数値」であるかどうかをテストしたい場合は

、これを試してみてください。

+0

ああ、それは完全な意味があります!ありがとうございました。 –

-1

iは、あなたはそれが文字列ではないとき、それはfalse

-1

あなたは文字や空白言うとき、あなたは"String"や `` nil```を意味していますが返されます、i.match(/^\d+$/)を呼び出すことができる文字列であるかどうかを確認するには?

入力が最初に整数かどうかを確認する必要があります。

return nil unless iterate_number.is_a?(Integer)

関連する問題