如何输出1到100之间偶数的“偶数”?

时间:2016-05-22 01:58:47

标签: c# .net

如何编写列出对象数组值int 1-100的C#代码,并在检测到转换为int的对象可被2整除时输出字符串文本“EVEN”?

class Program
{
    static void Main(string[] args)
    {
       object[] numbers = new object[100];

        numbers = Enumerable.Range(1, 100).Cast<object>().ToArray();


        foreach (object number in numbers)
        {
            if(Convert.ToInt32(number) % 2 == 0)
            {
                number.ToString().Equals("Even");
            }
            Console.WriteLine(number);
        }
        Console.Read();
     }
}

3 个答案:

答案 0 :(得分:3)

你遇到的问题是:

number.ToString().Equals("Even");

这是获取number的字符串表示形式,然后将其与字符串Even进行相等性比较,并对结果不做任何操作。如果您退后一步并考虑这一点,那就没有任何意义,因为如果Even是偶数,您想打印number

使用您当前的程序,您可以这样做:

if (Convert.ToInt32(number) % 2 == 0)
{
    Console.WriteLine("{0} is even", number);
}

也就是说,你的程序有一些可以改进的东西,因为它看起来好像你已经掌握了C#的类型系统。

首先,您要声明一个包含100个对象的数组:

object[] numbers = new object[100];

您已经知道要使用整数,因此,不应使用object,而应使用int

int[] numbers = new int[100];

接下来,您从1 - 100生成一系列整数:

numbers = Enumerable.Range(1, 100).Cast<object>().ToArray();

Enumerable.Range()返回一个整数集合,.ToArray()将其转换为整数数组。由于我们现在使用的是整数数组,因此无需将它们转换为object,因此可以简化为:

numbers = Enumerable.Range(1, 100).ToArray();

可以对此进行进一步的简化。 Enumerable.Range()返回IEnumerable<int>,表示整数集合。这意味着不是声明一个包含100个整数的数组,生成一个整数集合,将它们转换为数组,并将它们分配给numbers,我们可以这样做:

IEnumerable<int> numbers = Enumerable.Range(1, 100);

此处可以进行另一项更改,但我会在此答案的最后描述,所以让我们看看循环:

foreach (object number in numbers)
{
    if (Convert.ToInt32(number) % 2 == 0)
    {
        Console.WriteLine(number);
    }
}

由于我们已将代码更改为使用IEnumerable<int>而不是object[],因此我们现在可以将循环声明更改为:

foreach (int number in numbers)

这是可能的,因为实现IEnumerable的类型允许您使用foreach。另一个例子,如果我们有一群学生:

IEnumerable<Student> students = GetStudents();

我们可以循环这样:

foreach (Student student in students)

回到你的循环,现在numberint,我们不必将它从object转换为int可以检查它是否均匀。因此循环代码可以简化为:

foreach (int number in numbers)
{
    if (number % 2 == 0)
    {
        Console.WriteLine("{0} is even", number);
    }
}

要理解的主要是,当您已经知道要使用的类型时,您应该随时使用它,因为它总是会简化您编写的代码。完整的程序现在看起来像这样:

class Program
{
    static void Main(string[] args)
    {
        IEnumerable<int> numbers = Enumerable.Range(1, 100);

        foreach (int number in numbers)
        {
            if (number % 2 == 0)
            {
                Console.WriteLine("{0} is even", number);
            }
        }
        Console.Read();
    }
}

至于我提到的其他更改,您的整数生成代码可以简化为:

var numbers = Enumerable.Range(1, 100);

var关键字正在使用implicit type inference来确定numbers类型。同样,循环也可以更改为:

foreach (var number in numbers)

我暂时不担心隐式类型推断。为了完整起见,我提到了更多,但你应该先学会正确使用类型系统。

答案 1 :(得分:2)

您的代码几乎正确(.Equals("Even")部分除外)。您在foreach中的代码可以简化为:

       Console.WriteLine(number.ToString() + ((Convert.ToInt32(number) % 2) == 0 ? " is even" : ""));

}

答案 2 :(得分:0)

检查此代码段。

class Program
    {
        static void Main(string[] args)
        {
        var stringBuilder = new StringBuilder();

        var numbers = new List<object>();
        numbers = Enumerable.Range(0, 100).Cast<object>      ().ToList();            
        foreach (var number in numbers)
        {
            if (Convert.ToInt32(number) % 2 == 0)               
                stringBuilder.Append("EVEN");                
            else
                stringBuilder.Append(number);
        }

        Console.WriteLine(stringBuilder.ToString());
    }
}

如果此片段可以解决您的问题,请告诉我