Reputation: 85
My program I want to make is almost complete but I am having trouble with expression operator.I cant seem right expressions for it. I want to return “Integers close” if by one for numbers 2 and 3. I also want number 1 "far” differing from both other values by 2 or more.
example
(1, 2, 10) → Integers close
(5, 1, 9) → Integers far
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
Upvotes: 1
Views: 190
Reputation: 12201
if number1 > number2 or number3 then
puts "Integers close"
end
This isn't doing what you want it to. This will evaluate to true
whenever number1 > number2
or number is not nil (which is impossible, since it will always be at least the empty string.) As a matter of style, then
is unnecessary.
For your program, you don't want the user to have to enter numbers 2 and 3 if they want to quit. So test for quit after the first one. Refactoring would give you something like this:
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
Use chomp
instead of chop
, since the latter arbitrarily removes the last character while the former is specifically designed to remove \n
and \r
.
Upvotes: 2