sary - 1 year ago 77
Ruby Question

# Ruby while loop not stopping when condition is met

I starting to learn Ruby, and i'm stuck with this program i'm writing which is suppose to be the game "Craps" small part of the game at least anyway, the code is looping at the 2nd while loop even when the random dice is meeting the loop's condition.

This is the loop that keeps looping

``````while new_dice_sum != 7 or new_dice_sum != 11 or new_dice_sum != 2 or new_dice_sum != 3 or new_dice_sum != 12 or new_dice_sum != point
dice1 = 1 + rand(6)
dice2 = 1 + rand(6)
new_dice_sum = dice1.to_i + dice2.to_i
``````

This is the complete code of the program.

``````input = ""
point = 0
balance = 100
Bet = 10
dice1 = 0
dice2 = 0
dice_sum = 0
new_dice_sum = 0
won = 0
lost = 0
while input != "Q"
print "Please choose R to roll the dice or Q to exit the game: "
input = gets.chomp.upcase
if input == "R"
if balance > 10
dice1 = 1 + rand(6)
dice2 = 1 + rand(6)
dice_sum = dice1.to_i + dice2.to_i
puts "First dice is #{dice1} while the second dice is #{dice2} both are a total of #{dice_sum}"
if dice_sum == 7 || dice_sum == 11
balance = balance + Bet
won = won + 1
puts "You won, Your new balance is #{balance}"
elsif dice_sum == 2 || dice_sum == 3 || dice_sum == 12
balance = balance - Bet
lost = lost + 1
puts "You lost, Your new balance is #{balance}"
else
point = dice_sum
while new_dice_sum != 7 or new_dice_sum != 11 or new_dice_sum != 2 or new_dice_sum != 3 or new_dice_sum != 12 or new_dice_sum != point
dice1 = 1 + rand(6)
dice2 = 1 + rand(6)
new_dice_sum = dice1.to_i + dice2.to_i
puts "In the new roll with your point #{point}, The first dice is #{dice1} while the second dice is #{dice2} both are a total of #{new_dice_sum}"
if new_dice_sum == 7 || new_dice_sum == 11
balance = balance + Bet
won = won + 1
puts "You won, Your new balance is #{balance}"
elsif new_dice_sum == 2 || new_dice_sum == 3 || new_dice_sum == 12
balance = balance - Bet
lost = lost + 1
puts "You lost, Your new balance is #{balance}"
elsif new_dice_sum == point
balance = balance + Bet
won = won + 1
end
end
end
else
puts "Your balance is not enough to place a bet, Your balance now is #{balance}"
end
elsif input != "Q"
puts "#{input} is not valid choice"
end
end
puts "Your current balance is #{balance}\$ and you won #{won} times and lost #{lost} times"
exit
``````

Change your logic for while loop from `variable != firstcondition or variable != secondcondition` ... to `!(variable == condition or variable == condition ... )`