2013-08-02 3 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 ..."를 에 추가해야합니다.

문자열을 분할하려면 다음과 같이 입력하는 것이 좋습니다. 숫자 사이

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

을 여러 구역 (예 1           2 3)

안드레이 LINQ의 사용은 매우 간단한 예를 게시했다

...

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

이렇게하면 for 외부에 놓습니다. int으로 변환하고 모든 "부분"을 추가합니다. 그것은 "각각 partint으로 변환하고 그것을 더한다"를 의미합니다. "합계를 반환하십시오.

+0

와우! 빠른 답변 감사합니다. 그러나 sum이 for 루프에서 어떻게 나오는지 설명 할 수 있습니까? 나는 for 루프가 Vegas와 다소 유사하다고 생각했습니다 ... 여러분은 알다시피, 루프에서 일어나는 일은 루프에 머물러 있습니다. 루프가 완료되면 프로그램은 루프 밖으로 합계를 가져올 수 있습니까? – 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();