【问题标题】:Ruby undefined method `getBakiye' for []:Array (NoMethodError)[]:Array (NoMethodError) 的 Ruby 未定义方法“getBakiye”
【发布时间】:2020-05-31 10:26:54
【问题描述】:

为什么我不能将 Musteri 类的 getBakiye() 函数作为参数传递给 Banka 类的 bakiyeBilgisi() 函数?我用谷歌搜索了几次,但我没有 要做的事情。我做了同样的事情 python 并且它起作用了此时 ruby​​ 和 python 之间有什么不同?祝你有个美好的一天

我遇到了这个问题:

rb:122:in bakiyeBilgisi': undefined methodgetBakiye' for []:Array (NoMethodError)

    class Musteri
  attr_accessor :isim,:soyisim,:idno,:parola
  def initialize(isim,soyisim,idno,parola)
    @isim = isim
    @soyisim = soyisim
    @idno = idno.to_s
    @parola = parola.to_s
    @bakiye = 0
  end  
  #=====================================
  def getIsım #isim döndür
    return @isim
  end

  def getSoyIsım #soyisim al
    return @soyisim
  end

  def getIdNo #Idno al
    return getIdNo
  end

  def getParola  #parola al
    return @parola
  end

  def getBakiye  #bakiye al
    return @bakiye
  end

  def setBakiye(miktar) #bakiye değiştir
    @bakiye =miktar
    return @bakiye
  end

end #musteri sinifi bitişi

class Banka
  attr_accessor :musteriler,:isim
  def initialize(isim)
    @isim = isim
    @musteriler = []
  end #yapici    

  def musteriVarmi(idno,parola)
    for musteri in musteriler
      if musteri.getIdNo == idno and musteri.getParola == parola
        return musteri

      end 

    end 

  end 

  def aliciVarmi(idno)
    for musteri in @musteriler
      if musteri.getIdNo == idno
        return musteri
      end #if blogunun

    end #aliciVarmi for dongusu

  end #aliciVarmi fonksiyonu


  def paraAktar(gonderen,alici,miktar)
    if @musteriler.include? gonderen and @musteriler.include? alici
      if gonderen.getBakiye >= miktar
        alici.setBakiye(alici.getBakiye + miktar)
        puts "Gönderilme işlemi başarıyla gerçekleşti"
      else
        puts "Bakiye Yetersiz"
      end #paraAktar ifS
    else
      puts "Alıcı Bulunamadı"
    end #paraAktar ifS

  end #paraAktar fonk

  def musteriOl(isim,soyisim,idno,parola)
    @musteriler<<(Musteri(isim,soyisim,idno,parola))
  end #musteriOl fonk

  def paraCek(musteri,miktar)
    if miktar % 10 != 0
      puts "Bozuk para atmayiniz"
    else
      if musteri.getBakiye >= miktar
        puts "Önce paranizi\nSOnra kartinizi aliniz"
        musteri.setBakiye(musteri.getBakiye + miktar)
      else
        puts "Bakiye yetersiz"
      end #paracek elseS   
    end #paracek ifS  
  end #paracek fonk    

  def paraYatir(musteri,miktar)
    if miktar % 5 != 0
      puts "Bozuk para atmayiniz"
    else
      musteri.setBakiye(musteri.getBakiye + miktar)
      puts "Paraniz Yatirildi"
    end #paraYatir ifS
  end #paraYatir fonk

  def bakiyeBilgisi(musteri)
    musteri.getBakiye    

  end #bakiyeBİlgisi fonk    
end # Banka sinifi bitisi


def main
  banka = Banka.new("UmutPalabiyik")
  while true
    system("cls")
    puts "[1] Musteri Ol : "
    puts "[2] Giriş Yap"

    puts "Lutfen yapmak istediginiz islemi seciniz"
    secim1 = gets.chomp()

    if secim1 == "1"
      puts "Lütfen isminizi giriniz  : "
      isim = gets.chomp.to_s

      puts "Lütfen soyisminizi giriniz : "
      soyisim = gets.chomp.to_s

      puts "Lütfen id numaranizi giriniz : "
      idno = gets.chomp.to_s

      puts "Lütfen parolanızı giriniz : "
      parola = gets.chomp.to_s


      puts "Ana menuye donmek icin herhangi bir tusa basiniz"
      gets.chomp()

    elsif secim1 == "2"
      puts "Lütfen id numaranizi giriniz :"
      idno = gets.chomp.to_s

      puts "Lütfen parolanizi giriniz  :"
      parola = gets.chomp.to_s

      if banka.musteriVarmi(idno,parola)
        musteri = banka.musteriVarmi(idno,parola)
        while true
          system("cls")
          puts "[1] Bakiye Goster       [2] Para Yatır"
          puts "[3] Para Çek        [4] Para Aktar"
          puts "    [Q] Cikis"

          puts "Yapmak istediginiz islemi seciniz"
          secim2 = gets.chomp()

          if secim2 == "1"
            banka.bakiyeBilgisi(musteri)
            puts "Ana menüye dönmek için 'enter' a basiniz !"
            gets.chomp()

          elsif secim2 == "2"
            puts "Lutfen yatırmak istediginz tutari seciniz : "
            miktar = gets.chomp.to_i
            banka.paraYatir(musteri,miktar)

            puts "Ana menüye dönmek için 'enter' a basiniz !"
            gets.chomp()    

          elsif secim2 == "3"
            puts "Lütfen çekmek istediginiz miktarı giriniz : "
            miktar = gets.chomp.to_i
            banka.paraCek(musteri,miktar)

            puts "Ana menüye dönmek için 'enter' a basiniz !"
            gets.chomp()

          elsif secim2 == "4"
            puts "Alıcı ID :"
            idno = gets.chomp()

            puts "Aktarmak istediğiniz miktarı giriniz  :"
            miktar = gets.chomp().to_f

            if banka.aliciVarmi(idno)
              banka.paraAktar(musteri,banka.aliciVarmi(idno),miktar)
            else
              puts "Alici Bulunamadi !"

            end #3.elsif ifS

          elsif secim2 == "q" and secim2 == "Q"
            puts "Ana menüye yönlendiriliyorsunuz"
            sleep(0.5)
            puts "."
            sleep(0.5)
            puts ".."
            sleep(0.5)
            puts "..."
            break

          else
            puts "Hatalı Giriş"
            puts "Ana menüye dönmek için herhangi bir tusa basiniz : "
            gets.chomp()

          end # 2. while true ifS

        end #ikinci while true

      else
        puts "Banka kaydi bulunamadi ya da hatali giris"    

      end #elsif in ifS
    else
      puts "Hatali Giris"

    end #ilk ifS   
  end #while true    
end #main fonk

main

【问题讨论】:

  • 您的问题存在严重问题。提问前请参观here
  • 现在好了吗?
  • 请将您的代码以文本形式粘贴到此处。
  • 如何重现用户应在控制台中输入的值。预期的输出是什么?
  • 请参阅“How to Ask”、“Stack Overflow question checklist”和“MCVE”及其所有链接页面。

标签: ruby rubygems


【解决方案1】:

我猜是musteriVarmi方法引起的错误。您使用for 循环来查找单个值。当没有任何匹配时,数组musteriler 将从musteriVarmi 返回。 Ruby 有很多很好的方法可以使用 arrays

# This code will return a found value or `nil`
def musteriVarmi(idno, parola)
  musteriler.find do |musteri|
    musteri.getIdNo == idno and musteri.getParola == parola
  end
end

另外,请通过Rubocop 安装并检查您的代码。您的代码风格不传统。最好用英文命名类、方法和变量。

【讨论】:

猜你喜欢
  • 2012-08-21
  • 2018-10-18
  • 2018-05-16
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多