2017-08-17 32 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

修復了兩個錯誤。

1.Sergio Tulentsev指出你必須將輸入轉換爲整數。

2.您將需要返回驗證方法的輸入。

3.增加了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檢查編輯答案。 –

相關問題