【问题标题】:Ruby While loop not working correctlyRuby While 循环无法正常工作
【发布时间】:2015-12-06 19:56:43
【问题描述】:

我一直在尝试在 ruby​​ 中创建一个响应用户输入的 while 循环。 应该发生的是,当用户正确输入“Omega”这个词时,它会结束循环并显示一条消息,如果输入“提示”这个词,则会显示一条消息并重复循环,其他任何东西都会有一个“重试”消息显示。发生的情况是,无论输入什么,循环都只会询问原始问题。

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

@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!'

【问题讨论】:

    标签: ruby if-statement while-loop user-input


    【解决方案1】:

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

    补充说明:

    • 在 ruby​​ 中变量名称遵循与 C#/Java 不同的约定,而不是 GateOneLocked 开发人员写gate_one_locked

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

    • while(@GateOneLocked)就够了,不用检查是不是== true

    【讨论】:

    • 另外,gets.to_s 将在捕获的输入上保留一个换行符,而使用gets.chomp 将删除它; gets 已经返回一个字符串。否则,用户输入将永远不会匹配密码。您还将 GateOneHint 设置为局部变量,但在您的比较中将其称为实例变量 (@GateOneHint),如果没有定义将返回 nil
    • @djaszczurowski 我去掉了其中一个等号,现在发生的情况是任何输入都会显示“您输入了正确的密码”消息。
    【解决方案2】:

    我对您的代码进行了多次修复。我将else if 更改为elsif 并将@ 添加到缺少它的变量引用中,以便您的代码保持一致。 (除非您在课堂上使用此代码,否则我实际上会全部放弃它们。)我将您的 @GateOneLocked == false 更改为使用 assignment 运算符而不是 comparison 运算符.也许最重要的是,我添加了一个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!'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 2014-12-06
      • 2015-01-06
      • 2014-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多