2012-03-31 118 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