首页 > 解决方案 > 在 C# 数组中查找奇数或偶数

问题描述

我应该创建一个方法,该方法接受一个数组并判断数字是奇数还是偶数。我想我已经接近答案了,但是当我运行代码时,它会弹出“索引超出数组范围”。有没有办法解决这个问题?

private static string OddOrEven(int[] integerArray, string[] numAssign)
{

    foreach (int i in integerArray)
    {
        if (integerArray[i] % 2==0)
        {
            numAssign[i] = " is even";
            string returnValue = integerArray[i] + numAssign[i];
            return returnValue;
        }
        else
        {
            numAssign[i] = " is odd";
            string returnValue = integerArray[i] + numAssign[i];
            return returnValue;
        }
    }
    return "";
}

我还是 c# 的新手,所以非常感谢任何帮助。

标签: c#arraysdebugging

解决方案


您的错误在于如何foreach工作。我将提供一个不同的示例来帮助您理解:

List<Person> people = GetPeople();
foreach (Person p in people)
{
    Console.WriteLine(p.Name);
}

如您所见,foreach实际接收每个项目的变量,而不是它的索引。只是你有一个列表,int所以对你来说并不那么明显。

似乎您想要一个常规for循环:

for(int i = 0; i < integerArray.Length; ++i)
{
    if (integerArray[i] % 2==0)
    {
        numAssign[i] = " is even";
        string returnValue = integerArray[i] + numAssign[i];
        return returnValue;
    }
    else
    {
        numAssign[i] = " is odd";
        string returnValue = integerArray[i] + numAssign[i];
        return returnValue;
    }
}

下一个奇怪的事情是你的return returnValue;-if语句只能输入一个或另一个,所以它总是只为第一项返回一个字符串。它不会继续到第二个、第三个、第四个等项目,因为它在循环有机会移动到下一个值之前已经离开了方法。


猜测

我希望你想要一个这样的结果数组:

private static string[] OddOrEven(int[] integerArray)
{
    string[] resultValues = new string[integerArray.Length];
    for (int i = 0; i < integerArray.Length; ++i)
    {
        if (integerArray[i] % 2==0)
        {
            string numAssign = " is even";
            resultValues[i] = integerArray[i] + numAssign;
        }
        else
        {
            string numAssign = " is odd";
            resultValues[i] = integerArray[i] + numAssign;
        }
    }
    return resultValues;
}

请注意,我已经numAssign从方法参数中删除了传入数组,现在只需在方法本身中构建它。

这将产生这样的结果


推荐阅读