用C#练习,它不起作用

时间:2015-07-23 04:24:26

标签: c#

这是问题所在:给出一系列正整数,以空格分隔的数字串给出。编写一个程序,计算它们的总和。示例:" 43 68 9 23 318" - > 461。

那是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Exercises2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Give some numbers");
            int i = 0, j = 0;
            string n = Console.ReadLine();
            string[] numbers = n.Split(' ');
            int[] array;
            for (i = 0; i < numbers.Length; i++)
            {
                array = new int[int.Parse(numbers[i])];
                int s = Sum(array);
                Console.Write("the sum of your numbers is: {0} ", s);
            }
        }
        static int Sum(int[] array)
        {
            int sum = 0;
            for (int i = 0; i < array.Length; i++)
            {
                sum += array[i];
            }
            return sum;
        }



    }


}

我不知道为什么它不起作用,给我的总和是0。 谢谢。

3 个答案:

答案 0 :(得分:2)

问题是:

array = new int[int.Parse(numbers[i])];

你实际创建的数组的长度是给定的数字[i]。数组值都是0.所以

int s = Sum(array);

s始终为0.

正确的代码很简单:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Give some numbers");
        int i = 0, j = 0;
        string n = Console.ReadLine();
        string[] numbers = n.Split(' ');
        int s = 0;
        for (i = 0; i < numbers.Length; i++)
        {
            s += int.Parse(numbers[i]);
        }
        Console.Write("the sum of your numbers is: {0} ", s);
        Console.ReadLine();
    }
}

答案 1 :(得分:1)

你应该只迭代由.Split和sum。检索的字符串数组的每个元素。

工作示例.Net Fiddle

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

public class Program
{
    public static void Main()
    {

        Console.WriteLine("Give some numbers");
        string n = Console.ReadLine();
        int sum = 0;

        foreach(var i in n.Split(' ')){
            sum += int.Parse(i);
        }

        Console.Write("the sum of your numbers is: {0} ", sum);     
    }
}

答案 2 :(得分:0)

代码有问题,你在summation数组中得到用户给定数组的值作为数组的初始化。 array = new int [int.Parse(numbers [i])]; 这里是循环数组,每次值得到初始化。根据您的输入&#34; 43 68 9 23 318&#34;。数组将初始化为43,然后是68,然后是9,依此类推。初始化数组时,int的值默认为0。

所以请使用正确的null和整数检查来引用此解决方案。希望这会对你有所帮助!

static void Main(string[] args)
        {
            Console.WriteLine("Give some numbers");
            int i = 0;
            string n = Console.ReadLine();
            string[] numbers = n.Split(' ');
            if (numbers != null && numbers.Length > 0)
            {
                int[] array = new int[numbers.Length];
                int s = 0;
                for (i = 0; i < numbers.Length; i++)
                {
                     // Check if numbers[i] values is integer then add to array for some
                     int number;
                     bool result = Int32.TryParse(numbers[i], out number);
                     if (result)
                     {
                         array[i] = number;
                     }
                }
                s = Sum(array);
                Console.Write("The sum of your numbers is: {0} ", s);
            }
            Console.Read();
        }