下面的代码输出333而不是9。
如何更改它以打印总和计算而不是字符串联?
puts 'What is your first name?'
first = gets.chomp
puts 'What is your middle name?'
middle = gets.chomp
puts 'What is your last name?'
last = gets.chomp
var1 = first.length.to_s
var2 = middle.length.to_s
var3 = last.length.to_s
puts 'Did you know there are ' + var1 + var2 + var3 + ' characters in your name, ' + first + ' ' + middle + ' ' + last
答案 0 :(得分:5)
问题是Ruby理解字符串和整数/数字之间的区别:
'c'.class # => String
1.class # => Fixnum
如果要添加数字,则必须告诉Ruby从一个转换为另一个:
'1' + '2' # => "12"
1 + 2 # => 3
要将字符串值转换为数字,我们使用to_i
:
'1'.to_i + '2'.to_i # => 3
您已经知道chomp
对于删除尾随的新行非常有用:
"a\n" # => "a\n"
"a\n".chomp # => "a"
但转换为数字时则没有必要。 to_i
会将前导数字转换为数字并停在第一个非数字位置:
"1\n".chomp.to_i # => 1
"1\n".to_i # => 1
和
"12".to_i # => 12
"1 2".to_i # => 1
所以使用更容易:
"1\n".to_i # => 1
注意:to_i
可以做的不仅仅是从数字的十进制(基数10)表示转换,它可以做其他基础:
"10000".to_i(2) # => 16
"20".to_i(8) # => 16
"10".to_i(16) # => 16
但这是成长的东西。
答案 1 :(得分:1)
这将有效:
puts 'What is your first name?'
first = gets.chomp
puts 'What is your middle name?'
middle = gets.chomp
puts 'What is your last name?'
last = gets.chomp
var1 = first.length
var2 = middle.length
var3 = last.length
puts "Did you know there are #{var1 + var2 + var3} characters in your name"
注意:要将var
加在一起,您不应该转换为字符串。字符串插值需要双引号。良好的间距有助于提高可读性。
示例:
$ What is your first name?
#James
$ What is your middle name?
#Tiberius
$ What is your last name?
#Kirk
#Did you know there are 17 characters in your name
答案 2 :(得分:0)
您首先将名称长度(整数)转换为字符串,然后尝试将它们添加到另一个字符串中。这就是长度显示为333的原因。不是将长度转换为字符串,而是将它们保持原样(删除.to_s)。然后对数字执行添加,最后转换为字符串。
var1 = first.length
var2 = middle.length
var3 = last.length
puts 'Did you know there are ' + (var1 + var2 + var3).to_s + ' characters in your name, ' + first + ' ' + middle + ' ' + last