Нахождение нечетного или четного в массиве C#

#c# #arrays #debugging

Вопрос:

Я должен создать метод, который принимает массив и определяет, четное или нечетное число. Я думаю, что я близок к ответу, но когда я запустил код, он выскочил с надписью «Индекс находится за пределами массива». Есть ли способ это исправить?

 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#, поэтому буду очень признателен за любую помощь.

Комментарии:

1. Вы перебираете целые числа, а не индексы. i = число, а не индекс.

2. Замените цикл foreach циклом for

Ответ №1:

Ваша ошибка здесь в том, как 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 входящий массив из параметров метода и теперь просто создаю его в самом методе.

Это привело бы к такому результату.

Комментарии:

1. Спасибо, это действительно помогло! Я заставил его работать идеально. Мне пришлось настроить несколько частей, чтобы работать с переменными, которые у меня были, но структура работала идеально!