Ruby on rails 如何解决未定义的方法&x27;[]和#x27;对于类错误?
每次运行代码时,我都会遇到以下错误Ruby on rails 如何解决未定义的方法&x27;[]和#x27;对于类错误?,ruby-on-rails,ruby,class,oop,Ruby On Rails,Ruby,Class,Oop,每次运行代码时,我都会遇到以下错误 undefined method '[]' for nilClass: NoMethodError 有两个类,LineAnalyzer和Solution类,问题似乎出在LineAnalyzer计算单词频率的方法中,但我找不到错误 代码如下所示: class LineAnalyzer attr_accessor :highest_wf_count, :highest_wf_words, :linesCount, :content , :line_numbe
undefined method '[]' for nilClass: NoMethodError
有两个类,LineAnalyzer
和Solution
类,问题似乎出在LineAnalyzer
计算单词频率的方法中,但我找不到错误
代码如下所示:
class LineAnalyzer
attr_accessor :highest_wf_count, :highest_wf_words, :linesCount, :content , :line_number
@highest_wf_count = Hash.new(0)
@highest_wf_words = Array.new(0)
@content
@line_number
def initialize(line, line_num)
@content = line
@line_number = line_num
calculate_word_frequency()
end
def calculate_word_frequency()
@content.split.each do |word|
@highest_wf_count[word.downcase] += 1
end
max = 0
@highest_wf_count.each_pair do |key, value|
if value > max
max = value
end
end
word_frequency.each_pair do |key, value|
if value == max
@highest_wf_words << key
end
end
end
end
class Solution
attr_accessor :highest_count_across_lines, :highest_count_words_across_lines, :line_analyzers
@highest_count_across_lines = Hash.new()
@highest_count_words_across_lines = Hash.new()
@line_analyzers = Array.new()
def analyze_file
line_count = 0
x = File.foreach('C:\x\test.txt')
x.each do |line|
line_count += 1
@line_analyzers << LineAnalyzer.new(line, line_count)
end
end
end
solution = Solution.new
# Expect errors until you implement these methods
solution.analyze_file
类线性分析器
属性访问器:最高\u wf\u计数,:最高\u wf\u字,:行内容,:行编号
@最高\u wf\u计数=散列。新(0)
@最高\u wf\u字=数组。新建(0)
@内容
@行号
def初始化(行,行数)
@内容=行
@行数=行数
计算单词频率()
结束
def计算单词频率()
@content.split.each do|单词|
@最高\u wf\u计数[word.downcase]+=1
结束
最大值=0
@最高的_wf_计数。每个_对做|键,值|
如果值>最大值
最大值=最大值
结束
结束
单词频率。每个单词对都有键、值
如果值==最大值
@最高的单词试试这个:
def calculate_word_frequency()
@content.split.each do |word|
next if word.blank?
@highest_wf_count[word.downcase]+=1
end
max =0
@highest_wf_count.each_pair do |key, value|
if value > max
max = value
end
end
word_frequency.each_pair do |key, value|
if value == max
@highest_wf_words << key
end
end
end
def计算单词频率()
@content.split.each do|单词|
下一个如果word.blank?
@最高\u wf\u计数[word.downcase]+=1
结束
最大值=0
@最高的_wf_计数。每个_对做|键,值|
如果值>最大值
最大值=最大值
结束
结束
单词频率。每个单词对都有键、值
如果值==最大值
@最高\u wf\u单词数看起来您的问题是,当您试图在第一次看到单词时增加单词数时,您使用的哈希没有该键,因此无法增加它。第一次看到关键点时,应将其设置为1,并且所有出现的情况都应使其递增:
class LineAnalyzer
attr_accessor :highest_wf_count, :highest_wf_words, :linesCount, :content , :line_number
def initialize(line,line_num)
@highest_wf_count = Hash.new(0)
@highest_wf_words = Array.new(0)
@content = line
@line_number = line_num
calculate_word_frequency()
end
def calculate_word_frequency()
@content.split.each do |word|
highest_wf_count.key?(word.downcase) ? @highest_wf_count[word.downcase]+=1 : @highest_wf_count[word.downcase]=1
end
max =0
@highest_wf_count.each_pair do |key, value|
if value > max
max = value
end
end
highest_wf_count.each_pair do |key, value|
if value == max
@highest_wf_words << key
end
end
end
end
class Solution
attr_accessor :highest_count_across_lines, :highest_count_words_across_lines, :line_analyzers
@highest_count_across_lines = Hash.new()
@highest_count_words_across_lines = Hash.new()
def analyze_file
line_count = 0
x = File.foreach('C:\x\test.txt')
x.each{ |line|
line_count +=1
line_analyzer << LineAnalyzer.new(line,line_count)
}
puts "line_analyzer: #{line_analyzer.inspect}"
end
def line_analyzer
@line_analyzers ||= Array.new
end
end
类线性分析器
属性访问器:最高\u wf\u计数,:最高\u wf\u字,:行内容,:行编号
def初始化(行,行数)
@最高\u wf\u计数=散列。新(0)
@最高\u wf\u字=数组。新建(0)
@内容=行
@行数=行数
计算单词频率()
结束
def计算单词频率()
@content.split.each do|单词|
最高\u wf\u计数。关键字?(字。小写)@最高计数[word.downcase]+=1:@最高计数[word.downcase]=1
结束
最大值=0
@最高的_wf_计数。每个_对做|键,值|
如果值>最大值
最大值=最大值
结束
结束
最高的_wf_计数。每个_对做|键,值|
如果值==最大值
@尤兰达,你好!我发现一个关于LineAnalyzer类中的最高\u wf\u计数的错误。
我的意思是“最高的计数值是3”。见下文
class LineAnalyzer
attr_accessor :highest_wf_count, :highest_wf_hash, :highest_wf_words, :linesCount, :content , :line_number
def initialize(line,line_num) #<--- taking a line of text (content) and a line number
@highest_wf_hash = Hash.new(0)
@highest_wf_count = highest_wf_count #<--- a number with maximum number of occurrences for a single word (calculated)
@highest_wf_words = Array.new(0) #<--- an array of words with the maximum number of occurrences (calculated)
@content = line #<--- the string analyzed (provided)
@line_number = line_num #<--- the line number analyzed (provided)
calculate_word_frequency()
end
def calculate_word_frequency()
@content.split.each do |word|
highest_wf_hash.key?(word.downcase) ? @highest_wf_hash[word.downcase]+=1 : @highest_wf_hash[word.downcase]=1
end
@highest_wf_count = 0
@highest_wf_hash.each_pair do |key, value|
if value > @highest_wf_count
@highest_wf_count = value
end
end
highest_wf_hash.each_pair do |key, value|
if value == @highest_wf_count
@highest_wf_words << key
@highest_wf_count == value
end
end
end
end
类线性分析器
属性访问器:最高\u wf\u计数,:最高\u wf\u哈希,:最高\u wf\u字,:linescont,:content,:line\u编号
def initialize(line,line_num)#在word_frequency中声明word_frequency
的位置。每对do |键、值|
word_frequency应该是@highest_wf_count。。。代码中的错误我认为您将类实例变量与实例变量混合在一起,希望此链接可以帮助您。基本上,您将@highest\u wf\u words声明为类实例变量,并试图将其用作实例变量,这就是为什么会出现此错误,因为在@highest\u wf\u count[word.downcase]+=1行中,该变量被声明为类实例变量。tryFile.open('C:\x\test.txt'))
我的问题是在尝试添加LineAnalyzer时调用File.foreach('C:\x\test.txt')do | line | prashant402 nomethoder错误objects@Yolanda您能否将开始@LineAnalyzers e logger.error e.message logger.error e.backtrace.join(“\n”)结束以了解有关错误的更多信息没有任何区别,当我尝试向lineAnalyzers数组=>@lineAnalyzers@Yolanda添加值时出错,@lineAnalyzers@Hawkey001的问题您所做的代码修复是一个救命稻草。。。我现在明白什么意思了。谢谢大家请参考此链接:有人用几行文字帮我解决了这个问题,然后你可以尝试在课堂上解决这个问题: