user1239333
user1239333

Reputation: 85

ruby conditional logic

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

Answers (1)

Chris
Chris

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

Related Questions