Ruby 将字符串与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

我想写一个循环,计算一个单词的大写字母数。当我运行这段代码时,我得到一个错误,指出nil不能与字符串进行比较。我不明白这一点,因为我正在比较一个字符串和一个字符串

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