Ruby 将字符串与nil进行比较失败
我想写一个循环,计算一个单词的大写字母数。当我运行这段代码时,我得到一个错误,指出nil不能与字符串进行比较。我不明白这一点,因为我正在比较一个字符串和一个字符串Ruby 将字符串与nil进行比较失败,ruby,string,char,Ruby,String,Char,我想写一个循环,计算一个单词的大写字母数。当我运行这段代码时,我得到一个错误,指出nil不能与字符串进行比较。我不明白这一点,因为我正在比较一个字符串和一个字符串 passwort = gets.chomp i = 0 capitals = 0 while(i < (passw0ort.length) + 1) do if('A' <= passwort[i] && passwort[i] <= 'Z') capitals = capit
passwort = gets.chomp
i = 0
capitals = 0
while(i < (passw0ort.length) + 1) do
if('A' <= passwort[i] && passwort[i] <= 'Z')
capitals = capitals + 1
else
end
i = i + 1
end
passwort=gets.chomp
i=0
大写=0
而(i<(passw0ort.length)+1)do
如果('A'只需使用scan
方法String
类过滤掉大写字母即可
capitals = passwort.scan(/[A-Z]/).count
您得到nil
的原因是您计算的元素比实际的多
i您的循环太“长”:
或者简单地说:
从文档中:
序列c1-c2
表示c1
和c2
之间的所有字符
首先它是无效的。什么是passw0ort
?使用:passwort.count(“A-Z”)
对于将来,我建议格式化代码并指出错误发生的位置以引起注意。但是,我猜,如果您打印出passwort[I]
在循环内部,您将看到错误可能发生在打印所有字母之后。数组从0
到length-1
,因此i@Stefan它是passwort
,而不是password
@user2262149您的编辑无效。您更改了代码。您可以更改文本,但不能更改代码(除了设置空白或注释的格式)。很好,您修复了文本中的错误,并且通过添加四个空格设置了代码的格式,但是您不应该更改其内容。chomp
始终返回字符串
passwort = "test"
i = 0
while i < passwort.length + 1
puts "passwort[#{i}] == #{passwort[i].inspect}"
i = i + 1
end
passwort[0] == "t"
passwort[1] == "e"
passwort[2] == "s"
passwort[3] == "t"
passwort[4] == nil # <- this is your nil error
passwort = "123fooBAR"
passwort.chars.count { |char| 'A' <= char && char <= 'Z' }
#=> 3
passwort.count("A-Z") #=> 3