2016-09-30 74 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 
相關問題