Всем привет. Продолжаю изучать С#. Есть задача:
На вход метода подаётся массив целых чисел. Метод должен вычислить сумму всех чётных элементов.
Если ее решать не разбивая на методы, проблем нет, плевое дело. Но я решил сделать по правильному и разбить на методы. И сразу же появилась проблемы. Я решил добавить два метода: Первый метод будет находить в массиве четные числа Второй метод будет эти четные числа складывать Ну и main будет выводиться результат. Вот мой код:
static int EvenNumber(int[] array)
{
//тут получение четных чисел из массива
int evenNum = 0;
for (int i = 0; i < array.Length; i++)
{
if (array[i] % 2 == 0)
{
evenNum = array[i];
}
}
return evenNum; //это неправильно((
}
static int SummValue(int[] summ)
{
//получение суммы массива
return summ.Sum();
}
static void Main(string[] args)
{
int[] arrays = { 2, 4, 3, 10, 1 };
Console.ReadKey();
}
Как из метода EvenNumber вернуть четные числа массива и использовать их в методе SummValue? Чтоб потом вывести результат в main. Уже какой день бьюсь... Спасибо заранее Всем за помощь!
Ответ будет как начинающему (с соотв. кодом) и с некоторыми рекомендациями.
Вот вы создали проект и написали первую строчку
static void Main(string[] args)
{
int[] inputArray = new[] { 1, 2, 5, 7, 4, 7, 8, 6, 4, 0 };
}
что делать дальше? Размышлять письменно, т.е. писать комментарии вот так
static void Main(string[] args)
{
int[] inputArray = new[] { 1, 2, 5, 7, 4, 7, 8, 6, 4, 0 };
//получить массив четных чисел из входного массива
//получить сумму четных чисел из массива
//вывести результат на экран
Console.ReadKey();
}
Поразмышляли? Начинаем писать код.
Написали строки с несуществующими еще методами. Как быть? Пускай их за нас напишет студия. Вот так подводите мышку к подчеркнутым красным названию метода и вылезает такая подсказка, нажимаем Enter
и нужный метод создан.
Повторяем эту же операцию со вторым методом. И получаем второй метод. И программа почти готова!
static void Main(string[] args)
{
int[] inputArray = new[] { 1, 2, 5, 7, 4, 7, 8, 6, 4, 0 };
//получить массив четных чисел из входного массива
int[] evenNumbers = GetEvenNumbersArray(inputArray);
//получить сумму четных чисел из массива
int sum = GetSum(evenNumbers);
//вывести результат на экран
Console.WriteLine(sum);
Console.ReadKey();
}
private static int GetSum(int[] evenNumbers)
{
throw new NotImplementedException();
}
private static int[] GetEvenNumbersArray(int[] inputArray)
{
throw new NotImplementedException();
}
Она даже компилируется! Но не выполняется...
Теперь размышляем над первым методом.
private static int[] GetEvenNumbersArray(int[] inputArray)
{
//создать массив-аккумулятор для сбора четн.чисел
//пройти по аккумулятору и назначить всем элементам -1
//выбрать в цикле четные и занести их в аккумулятор
//подсчитать кол-во чисел не равных -1 в аккумуляторе
//cоздать результирующий массив
//внести в результирующий массив все числа не равные -1 из аккумулятора
//вернуть результат
throw new NotImplementedException();
}
Пишем код...
private static int[] GetEvenNumbersArray(int[] inputArray)
{
//создать массив-аккумулятор для сбора четн.чисел
int[] accum = new int[inputArray.Length];
//пройти по аккумулятору и назначить всем элементам -1
for (int i = 0; i < accum.Length; i++)
{
accum[i] = -1;
}
//выбрать в цикле четные и занести их в аккумулятор
for (int i = 0; i < inputArray.Length; i++)
{
if (inputArray[i] % 2 == 0)
{
accum[i] = inputArray[i];
}
}
//подсчитать кол-во чисел не равных -1 в аккумуляторе
int count = 0;
for (int i = 0; i < accum.Length; i++)
{
if (accum[i] != -1)
{
count++;
}
}
//cоздать результирующий массив
int[] result = new int[count];
//внести в результирующий массив все числа не равные -1 из аккумулятора
int j = 0;
for (int i = 0; i < accum.Length; i++)
{
if (accum[i] != -1)
{
result[j] = accum[i];
j++;
}
}
//вернуть результат
return result;
}
Теперь можно проверить работу первого метода. Вернитесь в метод Main()
и на вызове второго метода поставьте курсор и нажмите клавишу F9
, или мышкой кликните слева на серой рамке напротив нужной строки.
Таким образом мы установили точку останова. В режиме отладки программа остановится на этой строке и сможем проверить результат выполнения метода, вот так
наводите курсор мыши на нужную переменную и всплывает подсказка, в которой можно проверить результат выполнения метода.
В таком же духе продолжаем со вторым методом
private static int GetSum(int[] evenNumbers)
{
//создать результирующую переменную
int result = 0;
//пройти в цикле по evenNumbers и просуммировать в результат
for (int i = 0; i < evenNumbers.Length; i++)
{
result += evenNumbers[i];
}
//вернуть результат
return result;
}
Все. Можно проверить работу программы. Точку останова можно отключить, если по ней кликнуть еще раз или повторно поставить курсор на эту строчку и нажать F9
.
Вы скажите, что лень писать комментарии, а хочется сразу код. Когда вы только учитесь лучше сначала набросать канву решения в комментариях, а потом писать код. Такой режим работы помогает сохранить нить размышлений, и такой подход помогает даже опытным программистам в сложных и запутанных ситуациях.
Желаю успехов!
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Создаю приложение, в котором требуется мне взять базу с Avito, на нужной страничке имеется кнопка <div class="DnHhI"><span class="_2bexo">Загрузить еще</span></div>...
Я изменяю настройки прокси сервера windows с помощью
Уже неделю ломаю голову, не могу понять как сделатьДелаю робота для авторизации на сайте и парсинга