2012-03-31 168 views
1

我想要使我的程序幾乎完成,但我有麻煩的表達operator.I似乎不能正確的表達式。我想「接近整數」返回,如果通過一個用於數字2和3我也希望號碼1「遠」,由2個或多個來自兩個其他值不同。ruby​​有條件的邏輯

例如

(1,2,10 )→整數接近
(5,1,9)→整數遠

loop do 

     puts"enter each number then hit enter quit to end" 
    number1 = STDIN.gets 
    number1.chop! 
    number2 = STDIN.gets 
    number2.chop! 
    number3 = STDIN.gets 
    number3.chop! 

    numbers = [number1,number2,number3] 
    puts numbers.inspect 
    if number1 > number2 or number3 then 
     puts "Integers close" 
    end 
     if number2 < number3 then 
     puts"Integers far" 
     end 
     break if number1 == "quit" 
    end 
+0

'if number1> number2 || number1> number3 then ...' – 2012-03-31 18:12:51

+0

有一點需要注意,最後測試'quit'是沒有意義的。 – 2012-03-31 18:13:18

+0

你沒有檢查差異。你需要做一些減法。同樣根據你的描述,我不清楚你是否打算報告「遠」,如果*所有*號相差2或更多,或者你只是比較第一個和其他的? – 2012-03-31 18:30:07

回答

2
if number1 > number2 or number3 then 
     puts "Integers close" 
    end 

這不是做你想要的它,這將計算爲true每當number1 > number2或數量不爲零(這是不可能的,因爲它將始終至少爲空字符串)。作爲一種風格,then是不必要的。

對於您的程序,您不希望用戶必須輸入數字2和3,如果他們想要退出。所以在第一個之後測試戒菸。重構會給你這樣的事情:

loop do 
    puts "enter each number then hit enter quit to end" 
    number1 = STDIN.gets 
    number1.chomp! 
    exit if number1 == "quit" 
    number2 = STDIN.gets 
    number2.chomp! 
    number3 = STDIN.gets 
    number3.chomp! 

    numbers = [number1,number2,number3] 
    if number1 > number2 or number1 > number3 
     puts "Integers close" 
    elsif number2 < number3 
     puts"Integers far" 
    end 
end 

使用chomp代替chop,因爲後者任意刪除最後一個字符,而前者是專爲去除\n\r