#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. Спасибо, это действительно помогло! Я заставил его работать идеально. Мне пришлось настроить несколько частей, чтобы работать с переменными, которые у меня были, но структура работала идеально!