2013-08-02 121 views
0

所以這一次,我將數字作爲列表輸入,並用空格分隔每個數字。我現在編寫的代碼將數字放在一行中,因爲它應該是這樣,但是當我嘗試將字符串轉換爲Int32時,會失敗,從而導致程序無法正常使用並且不會給出總和。我不能很好地理解錯誤,但卻能夠準確解讀錯誤。一個人如何將拆分字符串數組轉換爲數字來產生總和?將字符串轉換爲總和C#

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 

    namespace Dynamic_Entry 
    { 
    class Program 
    { 
    static void Main() 
    { 
     Console.Write("Please provide a list of numbers, separated by spaces: "); 
     string list = Console.ReadLine(); 
     string[] parts = list.Split(' '); 
     int sum = 0; 

     for (int i = 0; i < parts.Length ; i++) 
     { 
      Console.WriteLine("{0, 5}", parts[i]); 

     } 

     sum = Convert.ToInt32(list); 
     Console.WriteLine("-----"); 
     Console.Write("{0, 5}", sum); 
     Console.ReadLine(); 

     } 
     } 
    } 

回答

5
for (int i = 0; i < parts.Length; i++) 
{ 
    Console.WriteLine("{0, 5}", parts[i]); 
    sum += Convert.ToInt32(parts[i]); 
} 

固定。

您試圖將「1 2 3 4 5 55」轉換爲int。您必須將「1」,「2」,「3」...轉換爲int並將它們添加到sum

我會補充一點,如果您想分割字符串,最好是做一些類似號之間

string[] parts = list.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 

這樣多個空格被刪除(1           2 3例如)

安德烈貼過使用LINQ的一個非常簡單的例子...

int sum = parts.Sum(p => Convert.ToInt32(p)); 

這個你會把for的週期放在外面。它將轉換爲int並添加所有「零件」。這意味着「對於每個part將其轉換爲int並添加它。返回總和」。

+0

哇!感謝您及時的回覆。但是,你能解釋一下sum是如何使它離開for循環的嗎?我認爲for循環有點像拉斯維加斯......你知道,循環中發生了什麼,停留在循環中。循環完成時,程序如何能夠從循環中獲取總和? – user1707042

+0

'sum'在循環外部定義 –

1

您可以將每個字符串轉換成int,並在一個循環加他們爲@xanatos建議,或者您可以使用LINQ和Enumerable.Sum(),例如:

var sum=parts.Sum(part=>Convert.ToInt32(part)); 

var sum=parts.Select(part=>Convert.ToInt32(part)) 
    .Sum(); 

如果你有更復雜的表達方式,真正的好處就來了。當你需要篩選值,提取性能等

例如,您可以過濾值大於3這樣的:

var sum=parts.Select(part=>Convert.ToInt32(part)) 
    .Where(num=>num>3) 
    .Sum();