2016-09-30 65 views
0

下面的代码输出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 
+1

欢迎来到Stack Overflow。请阅读“[问]”,包括链接的页面。我们不关心你的经验水平,只关心你的尝试,展示你的尝试,并且你问了一个深思熟虑的问题。 –

回答

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 
+0

奇怪的是唯一指出*插值*的人可以做到这一点,不需要所有'+ ... .to_s ... +'cruft。 – tadman

5

的问题是,红宝石理解一个字符串和一个整数/数字之间的差别:

'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 CAN不只是从十进制(基数为10)的数字表示转换,它可以做其他的基地:

"10000".to_i(2) # => 16 
"20".to_i(8) # => 16 
"10".to_i(16) # => 16 

但这是成长的事情。

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 
相关问题