Вывести сумму каждого одномерного массива из трех одномерных массивов
Нужно создать массив из трех одномерных массивов. [3][ ].Заполните его значениями чисел от 1 до 10 рандомайзером. Вывести все значения массива (каждый одномерный массив выводится построчно в консоль). Далее нужно вывести сумму каждого одномерного массива, а потом вывести среднее арифметическое всех значений массива. Массив заполнила, а вот как сделать, чтобы выводилась сумма каждой строчки, у меня выводилась сумма только первой, а далее он уже складывал все строчки. Я начала переделывать и уже забыла как было раньше.
int[][] arrayOfarrays = new int[3][];
arrayOfarrays[0]=new int[3];
arrayOfarrays[1]=new int[3];
arrayOfarrays[2]=new int[4];
Random randomiser = new Random ();
for (int i = 0; i < arrayOfarrays.Length; i++)
{
for (int j = 0; j < arrayOfarrays[i].Length; j++)
{
arrayOfarrays[i][j] = randomiser.Next(0, 10);
Console.Write(arrayOfarrays[i][j] + " ");
}
Console.WriteLine();
}
//int[] amount2 = new int[3];
for (int k = 0; k < arrayOfarrays.GetLength(0); k++)
{
int amount = 0;
for (int n = 0; n < arrayOfarrays[k].GetLength(1); n++)
{
amount += /*amount-*/arrayOfarrays[k][n];
//amount2[n] = amount;
//Console.Write(amount2[n] + " ");
Console.WriteLine(amount + " ");
}
//Console.Write(amount + " ");
Console.WriteLine();
}
Console.WriteLine();
Ответы (2 шт):
var rnd = new Random();
int[] GetRandomArr() => Enumerable.Range(0, rnd.Next(1, 10)).Select(_ => rnd.Next(1, 10)).ToArray();
var input = Enumerable.Range(0, 3).Select(_ => GetRandomArr()).ToArray();
foreach (var arr in input)
{
// тут два прохода по под-массиву, но меньше кода.
// Если упор на оптимальности / циклах - можно сделать вложенный foreach выводить в консоль + считать за один проход
// То же касается и заполнения массива. Можно заполнять / выводить в консоль / считать за один проход
Console.WriteLine($"[{string.Join(',', arr)}]");
var sum = arr.Sum(x => x);
var avg = (double) sum / arr.Length;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($"Sum is {sum}. Average is {avg}");
Console.ResetColor();
}
После того как сгенерировали массив, как-то так:
// общее количество элементов всех массивов
int amount = 0;
// общая сумма элементов всех массивов
int overallSum = 0;
// цикл по массивам
for (int k = 0; k < arrayOfarrays.Length; k++)
{
// суммируем количество элементов в массиве
amount += arrayOfarrays[k].Length;
// суммируем только в пределах массива k
int arraySum = 0;
// цикл по элементам массива k
for (int n = 0; n < arrayOfarrays[k].Length; n++)
{
// суммируем элемент массива
arraySum += arrayOfarrays[k][n];
}
// выводим сумму массива k
Console.WriteLine($"{k} sum: {arraySum}");
// добавляем сумму k в общую сумму элементов всех массивов
overallSum += arraySum;
}
Console.WriteLine();
// среднее арифметическое - делим общею сумму на количество элементов
Console.WriteLine($"avg: {overallSum / amount}");
И не надо путать многомерный массив [,] со ступенчатым [][].
Функция GetLength(int dimension) - как раз для многомерного.