Private Method Error

A

Ari Brown

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?

-------------------------------------------------------|
~ Ari
crap my sig won't fit
 
D

dblack

Hi --

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)
 
A

Ari Brown

On Jun 25, 2007, at 7:43 PM, (e-mail address removed) wrote:
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)].

Ahh! Okay! Thanks!
(You probably also want to do something to update @valie :)
Don't worry, I do. I didn't want to show my code for fear of
violating something.

~ Ari
English is like a pseudo-random number generator - there are a
bajillion rules to it, but nobody cares.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,990
Messages
2,570,211
Members
46,796
Latest member
SteveBreed

Latest Threads

Top