2017-08-17 3 views
0

このコードを実行するたびに、最初の試行で0より大きい整数を入力しても、「INTEGER GREATER THAN 0」というプロンプトが表示されます。私がverifyメソッドで達成しようとしているのは、入力が0より大きい整数だけを受け入れ、何か他のものを入れた場合、 "INTEGER GREATER THAN 0"を促すということです。どんな助けもありがとう。メソッドを使用してユーザー入力を0より大きい整数に制限するにはどうすればよいですか?

def verify(input) 
    puts "please input an integer > 0" 
    input = gets.chomp 
    while input == 0 || input.class != Fixnum 
    puts "INTEGER GREATER THAN 0" 
    input = gets.chomp!.to_i 
    end 
end 

puts "for your first number:" 
num_1 = verify(num_1) 
puts "for your second number:" 
num_2 = verify(num_2) 

def div(num_1, num_2) 
    num_1/num_2 
end 
def rem(num_1,num_2) 
    num_1 % num_2 
end 

puts "#{num_1.to_s} divided by #{num_2.to_s} is #{div(num_1, num_2)} remainder #{rem(num_1,num_2)}" 
+0

'gets'は文字列を返します。数にキャストする。 'input = gets.to_i' –

+0

除算、陽性および余りの方法はすでに存在します。 'a%b'≠' a.remainder b 'にも注意してください。 –

答えて

0

2つのエラーが修正されました。

1.Sergio Tulentsevは、入力を整数に変換する必要があることを指摘しました。

2.確認メソッドの入力を返す必要があります。

3.Added is_integer?方法。

def is_integer?(param) 
    true if Integer(param) rescue false 
end 

def verify(input) 
    puts "please input an integer > 0" 
    input = gets.chomp 

    while input.to_i <= 0 || !is_integer?(input) 
    puts "INTEGER GREATER THAN 0" 
    input = gets.chomp! 
    end 

    return input.to_i 
end 

puts "for your first number:" 
num_1 = verify(num_1) 
puts "for your second number:" 
num_2 = verify(num_2) 

def div(num_1, num_2) 
    num_1/num_2 
end 
def rem(num_1,num_2) 
    num_1 % num_2 
end 

puts "#{num_1.to_s} divided by #{num_2.to_s} is #{div(num_1, num_2)} remainder #{rem(num_1,num_2)}" 
+0

フロートを受け入れないで、 'input = gets.chomp.to_i'を使うようにコードを変更すると、プログラムは浮動小数点を単純に整数に切り捨てます。 'INTEGER GREATER THAN 0'メッセージでバウンスするようにプログラムしたいのですが? – nightrainlily

+0

@nightrainlily編集された回答を確認します。 –

関連する問題