Задача выдает не правильное значение(работа с делегатами и анонимными методами)? Суть задачи проста - нужно создать проект по шаблону Console Application(.NET Core). Создать анонимный метод, который принимает в качестве аргумента массив делегатов и возвращает среднее арифметическое возвращаемых значений методов сообщенных с делегатами в массиве. Методы, сообщенные с делегатами из массива, возвращают случайное значение типа int. Мое решение:using System;
namespace ConsoleApp44
{
public delegate int Number();
public delegate int MediumCalc(Number[] arrayX);
class Program
{
public static int Randomizer()
{
Random rand = new Random();
return rand.Next(1, 10);
}
static void Main(string[] args)
{
Number[] numArr = new Number[5];
for(int i = 0; i < numArr.Length; i++)
{
numArr[i] = Randomizer;
Console.Write(" " + numArr[i].Invoke() + " ");
}
Console.WriteLine();

MediumCalc mediumCalc = delegate (Number[] arrayX)
{
int sum = 0;
for (int i = 0; i

21 Авг 2019 в 07:00
450 +1
1
Ответы
1

Проблема заключается в делении типа int, которое приводит к потере дробной части. Вам нужно явно привести сумму к типу double перед делением, чтобы получить правильный результат. Вот исправленный код:

using System;
namespace ConsoleApp44
{
public delegate int Number();
public delegate double MediumCalc(Number[] arrayX);
class Program
{
public static int Randomizer()
{
Random rand = new Random();
return rand.Next(1, 10);
}
static void Main(string[] args)
{
Number[] numArr = new Number[5];
for(int i = 0; i < numArr.Length; i++)
{
numArr[i] = Randomizer;
Console.Write(" " + numArr[i].Invoke() + " ");
}
Console.WriteLine();
MediumCalc mediumCalc = delegate (Number[] arrayX)
{
double sum = 0;
for (int i = 0; i < arrayX.Length; i++)
{
sum += arrayX[i]();
}
return ((sum) / (arrayX.Length));
};
Console.WriteLine(mediumCalc(numArr));
Console.ReadKey();
}
}
}

Теперь результат деления будет корректным.

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир