Переменные не обновляются c# - PullRequest
0 голосов
/ 07 апреля 2020

Я пишу C# Программу для отображения средних оценок, наивысшей оценки и наименьшей оценки Результат должен быть высшая оценка - 90,5 самый низкий балл 77,3 средний балл 85,633 Но, к сожалению, появляются так высшая оценка - 1.7976931348623157E + 308. самый низкий класс -1,7976931348623157E + 308 средний балл 85,633 Два дня я искал решение, но не смог, поэтому мне пришлось задать вопрос Спасибо тебе

using System;
using System.Collections.Generic;

namespace GradeBook
{
    public class Statistics
    {
        public double Average;
        public double High;
        public double Low;
    }

    public class Book
    {
        public Book()
        {
            grades = new List<double>();
        }
        public void addGrade(double grade)
        {
            grades.Add(grade);
        }
        public Statistics GetStatistics()
        {
            var result = new Statistics();
            result.Average = 0.0;
            result.High = double.MaxValue;
            result.Low = double.MinValue;

            foreach (var grade in grades)
            {
                result.Low = Math.Min(grade, result.Low);
                result.High = Math.Max(grade, result.High);
                result.Average += grade;
            }
            result.Average /= grades.Count;
            return result;
        }
        private List<double> grades;
    }
    class Program
    {
        static void Main(string[] args)
        {
            Book book = new Book();
            book.addGrade(89.1);
            book.addGrade(90.5);
            book.addGrade(77.3);
            var stats = book.GetStatistics();

            Console.WriteLine("the highest grade is " + stats.High);
            Console.WriteLine("the lowerst grade is " + stats.Low);
            Console.WriteLine($"the average grade is {stats.Average:N3}");
        }
    }
}

Ответы [ 4 ]

1 голос
/ 07 апреля 2020

Проблема в том, что вы присвоили double.MaxValue наивысшему баллу и double.MinValue на низком.

Поэтому, когда вы используете Math.max / Math.min, вы постоянно получаете double.Max / double.Min.

попробуйте просто переключить их следующим образом (будет работать только при условии указания значений):

result.High = double.MinValue;
result.Low = double.MaxValue;
1 голос
/ 07 апреля 2020

Итак, у вас есть этот код для оценки каждой оценки по переменным result.Low и result.High вне l oop:

result.Low = Math.Min(grade, result.Low);
result.High = Math.Max(grade, result.High);

Но вы определили их так:

result.High = double.MaxValue;
result.Low = double.MinValue;

Следовательно, это невозможно для grade > double.MaxValue или grade < double.MinValue

Лучшее решение заключается в следующем:

var result = new Statistics();
var firstGrade = grades.DefaultIfEmpty().First(); // get the first grade in the list, or 0 if it's empty

// assign that to average, high, and low
result.Average = firstGrade;
result.High = firstGrade;
result.Low = firstGrade;

// visit every grade after the first
foreach (var grade in grades.Skip(1))
{
    result.Low = Math.Min(grade, result.Low);
    result.High = Math.Max(grade, result.High);
    result.Average += grade;
}

result.Average /= grades.Count;
return result;

Мы также должны рассмотреть случай, когда grades.Count == 0, что приведет к ошибке в строке result.Average /= grades.Count. Мы можем исправить это так:

if (grades.Count > 0)
{
    result.Average /= grades.Count;
}
return result;
0 голосов
/ 07 апреля 2020

Как уже говорили другие, вы смешали double.MaxValue and double.MinValue`. В качестве альтернативы вы можете полностью избежать их, выполнив это:

public Statistics GetStatistics()
{
    return new Statistics()
    {
        Average = grades.Average(),
        High = grades.Max(),
        Low = grades.Min(),
    };
}
0 голосов
/ 07 апреля 2020

Обмен result.High на double.MinValue и result.Low на double.MaxValue должен помочь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...