tags:

views:

33

answers:

0

Hi Im having a problem with a project im doing through school. When I try and run my program i get this error message: undefined method `[]' for nil:NilClass (NoMethodError). I executed it through TextMate and it gave me an error and said that the instance variabel @parkin_lots
not initialized?? I thought i ghad done that. Please would be grateful if anyone had a clue to my problem. Thanks

require 'guest'
require 'parking_lot'

=begin 

=end
class Camping

 attr_accessor :current_guests, :parking_lots, :all_guests

 # 
 # slumpade platser i den 1-baserade listan
 def initialize

  # de nuvarande gästerna
  @current_guests = Array.new(32)

  # initiera husvagnsplatserna
  @parking_lots = Array.new(32)
  32.times do |nr|
   @parking_lots[nr] = Parking_Lot.new(nr)
  end 
  end

  # samtliga gäster
  @all_guests = []

  # initiera incheckade gäster
  defaultGuests = Array[
   Guest.new("Logan",  "Tokyo",  "5880089", 1, @parking_lots[0]),
   Guest.new("Scott",  "New York",  "29884", 2, @parking_lots[1]),
   Guest.new("Luke",  "Barcelona",   "1456", 3, @parking_lots[2]),
   Guest.new("Damian",   "Berlin",   "5689", 4, @parking_lots[3]),
   Guest.new("Hank", "Chicago",   "89055", 5, @parking_lots[4]),
  ]

  # lägg in de incheckade gästerna i nuvarande gästerna samt historiken
  defaultGuests.each do |guest|
   @current_guests[guest.plot.nr] = guest
   @all_guests.push(guest)
  end
 end

 # Returnerar en strängrepresentation av gästlistan, dvs to_s från Guest-klassen.
 # Om en plats är ledig skrivs texten "Ledig" ut.
 def to_s
  # skapa en tom sträng som fylls på vidare
  list = ""

  # loopa från 1 till 32
  (1..32).each do |n|
   # översätt positionen till 0-baserad array och kolla om det finns 
   # någon gäst registrerad på positionen, och i så fall lägg till 
   # texten i list
   if (!@current_guests[n-1].nil?)
    list += @current_guests[n-1].to_s
   else
    # annars, lägg till texten "Ledig"
    list += n.to_s + ": Ledig\n"
   end
  end
  return list
 end

 # 
 # ledig plats (nummer mellan 1-32).
 def generateParkingLot
  # slumpa ett tal mellan 1 och 32
  randomNr = 1+rand(32)
  # finns det en gäst på den (0-baserade) positionen?
    if (!@current_guests[randomNr-1].nil?)
     # isåfall, generera en ny siffra
     generateParkingLot
    else
     # returnera den genererade siffran
     return randomNr
    end
 end