Возвращение среднего для массива в C# Консольное приложение - PullRequest
0 голосов
/ 29 февраля 2020

Цель моей программы - взять 4 входа (число c от 1 до 100) и создать среднее значение на основе этих входов, используя foreach l oop. В настоящее время мой код приводит к отдельным строкам с нечетными средними. Кажется, я что-то упускаю, но не могу понять.

Пример ввода: Строка «Введите число от 1 до 100» повторяется в общей сложности четыре раза, учитывая 4 ввода.

Вывод должен состоять из одной строки "Среднее значение ##". Основано на числах ввода.

Мой текущий выходной сигнал «Среднее значение ##» повторяется 4 раза, отображая каждый полученный вход вместо среднего.

Любая помощь приветствуется.

    class Program
{
    public static double avg(int[] arr)
    {
        double sum = 0;

        for (int i = 0; i < arr.Length; i++)
        {
            sum += arr[i];
        }
        return sum / arr.Length;
    }
    public static void Main(string[] args)
    {
        int SIZE = 4;
        string[] names = new string[SIZE];
        int[] score = new int[SIZE];
        double avg1 = 0;

        for (int i = 0; i < SIZE; i++)
        {
            Console.Write("Enter a score between 1 - 100.  ");
            score[i] = Convert.ToInt32(Console.ReadLine());
            while (true)
            {
                if (!(score[i] >= 1 && score[i] <= 100))
                {
                    Console.WriteLine("Invalid number entered.");
                    score[i] = Convert.ToInt32(Console.ReadLine());
                }
                else
                {
                    break;
                }
            }
            avg1 = avg(score);
        }
        foreach (double a in score)
        {
            Console.WriteLine("The average of the test scores is: " + Math.Round(a, 2));
        }
    }
}

}

Ответы [ 2 ]

0 голосов
/ 29 февраля 2020

Мой текущий выходной сигнал "Среднее значение ##" повторяется 4 раза, отображая каждый полученный вход вместо среднего.

Поскольку ваша функция avg1 = avg(score); находится внутри для l oop. Поместите его снаружи для l oop.


Предложение по рефакторингу кода:

Linq в C# обеспечивает .Sum() функция, которая вычисляет сумму всех чисел в массиве.

Чтобы вычислить среднее значение, вам просто нужно вычислить сумму элементов массива и разделить ее на массив .Length.

Вы можете сделать это в одна строка, не нужно писать собственную функцию,

//Here you don't need separate function to calculate an average
var average = Math.Round((score.Sum() / score.Length),2);  
Console.WriteLine("The average of the test scores is: "+average);
0 голосов
/ 29 февраля 2020

Я не уверен, почему вы зацикливаете Console.WriteLine, поэтому вы получаете выходные данные 4 раза.

вам просто нужно использовать:

Console.WriteLine("The average of the test scores is: " + Math.Round(avg1 , 2));

ваш фрагмент должен выглядеть примерно так:

class Program
{
  public static double avg(int[] arr)
  {
    double sum = 0;

    for (int i = 0; i < arr.Length; i++)
    {
        sum += arr[i];
    }
    return sum / arr.Length;
}
public static void Main(string[] args)
{
    int SIZE = 4;
    string[] names = new string[SIZE];
    int[] score = new int[SIZE];
    double avg1 = 0;

    for (int i = 0; i < SIZE; i++)
    {
        Console.Write("Enter a score between 1 - 100.  ");
        score[i] = Convert.ToInt32(Console.ReadLine());
        while (true)
        {
            if (!(score[i] >= 1 && score[i] <= 100))
            {
                Console.WriteLine("Invalid number entered.");
                score[i] = Convert.ToInt32(Console.ReadLine());
            }
            else
            {
                break;
            }
        }

    }
    avg1 = avg(score);
    Console.WriteLine("The average of the test scores is: " + Math.Round(avg1, 2));
}
...