【问题标题】:How can I make this simple bank system keep an updated balance?我怎样才能让这个简单的银行系统保持更新的余额?
【发布时间】:2014-07-02 12:42:55
【问题描述】:
def account()
    puts "ENTER ACCOUNT NUMBER"
    accountnumber = gets.chomp
    puts "SUCCESS"
    modeselect()
end

def modeselect()
    puts "WHAT WOULD YOU LIKE TO DO?"
    mode = gets.chomp
    mode.upcase!
    case mode
        when "DEPOSIT"
        deposit()
        else
        account()
    end
end

def deposit()
    balance = 0
    puts "ENTER DEPOSIT AMOUNT"
    depositamount = gets.chomp.to_i
    balance == balance + depositamount
    puts "DEPOSIT SUCCESSFUL, BALANCE = #{balance}"
    modeselect()
end


account()

目前,代码完成了存款,但是当再次运行存款方法时,余额被重置,我试图让它从上次运行时开始,所以每次存款后余额都会永久更新。

我该怎么做?谢谢。

【问题讨论】:

  • 使用实例变量,@balance。
  • balance == balance + depositamount 在你的代码中做了什么?
  • 我认为您需要多阅读一些基础知识。这是一个类的完美案例,但我不清楚你是否知道如何使用它。

标签: ruby console


【解决方案1】:

天平似乎被重置的原因有三个。

首先是余额被存储在一个变量中,该变量的范围包含在 deposit 函数块中。这意味着在函数完成时该变量具有的任何值都不会被保留。事实上,该变量不再可访问。您可以使用 Sergio 建议的实例变量 @balance

其次。进入存款功能块后,余额立即显式设置为 0。解决此问题的一个选项是仅在尚未为 @balance 分配值的情况下为其分配值 0。你可以使用@balance ||= 0来做到这一点

第三。存款功能块第四行的运算符== 是比较运算符而不是赋值运算符。我相信您打算使用=。

def account()
    puts "ENTER ACCOUNT NUMBER"
    accountnumber = gets.chomp
    puts "SUCCESS"
    modeselect()
end

def modeselect()
    puts "WHAT WOULD YOU LIKE TO DO?"
    mode = gets.chomp
    mode.upcase!
    case mode
        when "DEPOSIT"
        deposit()
        else
        account()
    end
end

def deposit()
    @balance ||= 0
    puts "ENTER DEPOSIT AMOUNT"
    depositamount = gets.chomp.to_i
    @balance = @balance + depositamount
    puts "DEPOSIT SUCCESSFUL, BALANCE = #{@balance}"
    modeselect()
end

account()

【讨论】:

    【解决方案2】:

    如果您不想使用@balance 等实例变量,您可能需要在调用方法/函数时将变量balance 传递给“保留”值。像这样的东西(请注意,这段代码可以工作,但有严重的缺陷)

    def account()
        balance ||= 0
        puts "ENTER ACCOUNT NUMBER"
        accountnumber = gets.chomp
        puts "SUCCESS"
        modeselect(balance)
    end
    
    def modeselect(balance)
        puts "WHAT WOULD YOU LIKE TO DO?"
        mode = gets.chomp
        mode.upcase!
        case mode
            when "DEPOSIT"
            #balance ||= 0
            deposit(balance)
            else
            account()
        end
    end
    
    def deposit(balance)        
        puts "ENTER DEPOSIT AMOUNT"
        depositamount = gets.chomp.to_i
        balance = balance + depositamount
        puts "DEPOSIT SUCCESSFUL, BALANCE = #{balance}"
        modeselect(balance)
    end
    
    
    account()
    

    【讨论】:

      猜你喜欢
      • 2017-04-04
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 2016-09-18
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多