Ruby while 循环无法正常工作

Ruby While loop not working correctly

我一直在尝试在 ruby 中创建一个 while 循环来响应用户输入。 应该发生的是,当用户正确输入单词 "Omega" 时,它会结束循环并显示一条消息,如果输入单词 "hint" 则会显示一条消息并重复循环,以及其他任何内容将显示 "try again" 消息。发生的情况是,无论输入什么,循环只会询问原始问题。

谁能找出我的代码有什么问题,谢谢

@GateOneLocked = true
GateOnePassword = String.new('Omega')
GateOneHint= String.new('hint')
#Omega is supposed to be the correct password
while (@GateOneLocked == true) do
puts 'What is the password?'
passwordEntered = gets.to_s
    if (@passwordEntered == @GateOnePassword)
        @GateOneLocked == false
    else if (@passwordEntered != @GateOneHint)
    puts "This is a hint: the password is 'Omega'"
    puts " "
    puts " "
    else
        puts "wrong password, try again"
        puts " "
        puts " "
    end
    end
end
puts 'You entered the correct password!'

而不是 @GateOneLocked == false 应该是 @GateOneLocked = false

补充说明:

  • in ruby 变量名遵循与 C#/Java 不同的约定,而不是 GateOneLocked 开发者写 gate_one_locked

  • 不用写String.newvariable = "your_string"就够了(GateOnePassword = 'Omega')

  • while(@GateOneLocked) 就足够了——不需要检查它是否是 == true

我对您的代码进行了多项修复。我将 else if 更改为 elsif 并将 @ 添加到缺少它的变量引用中,以便您的代码保持一致。 (实际上我会放弃它们,除非你在 class 中使用这段代码。)我将你的 @GateOneLocked == false 更改为使用 assignment 运算符而不是比较运算符。也许最重要的是,我添加了一个 chomp 调用,它将从您的用户输入中删除 \n(换行符)。此外,我将 elsif 中的比较更改为 == 以便您的用户可以请求提示,这正是我认为您的意图。

@GateOneLocked = true
@GateOnePassword = String.new('Omega')
@GateOneHint= String.new('hint')
#Omega is supposed to be the correct password
while (@GateOneLocked == true) do
    puts 'What is the password?'
    @passwordEntered = gets.chomp.to_s
    if (@passwordEntered == @GateOnePassword)
        puts "abc"
        @GateOneLocked = false
    elsif (@passwordEntered == @GateOneHint)
        puts "This is a hint: the password is 'Omega'"
        puts " "
        puts " "
    else
        puts "wrong password, try again"
        puts " "
        puts " "
    end
end
puts 'You entered the correct password!'