Hi --

On Tue, 26 Jun 2007, Ari Brown wrote:

> Once again, more questions.
>
> So this is pertaining to my implementation of the name picker app. When I 
> pick a random name, I then proceed to check if it matches any name in the 
> used_names file. However, I keep getting a private method error when I first 
> choose a random line.
> ERROR
> -----------------------------------------|
> namePicker-cli.rb:24:in `random': private method `chop' called for 
> nil:NilClass (NoMethodError)
>       from namePicker-cli.rb:22:in `open'
>       from namePicker-cli.rb:22:in `random'
>       from namePicker-cli.rb:44
>
> CODE
> ----------------------------------------|
> def random
>
>   until @valid == true
>     File.open(@input_file) do |f|                   # Open the file
>       lines = f.readlines                            # Read the lines
>       chosen_one = lines[rand(lines.size) + 1].chop  # Select a random one
>     end
> ----------------------------------------|
>
> I have no clue why I'm getting this, and I'm almost in tears because my 
> computer doesn't like me. Help?

Let's say lines has 10 elements.  rand(11) gives you a number between
0 and 10, inclusive.  Adding 1 gives you a number between 1 and 11.
Since the last index of lines is 9, that means that if you get 10 or
11, you're indexing nil (lines[10] or lines[11]).

So... you probably want lines[rand(lines.size)].

(You probably also want to do something to update @valie :-)


David

-- 
* Books:
   RAILS ROUTING (new! http://www.awprofessional.com/title/0321509242)
   RUBY FOR RAILS (http://www.manning.com/black)
* Ruby/Rails training
     & consulting:  Ruby Power and Light, LLC (http://www.rubypal.com)