c# - 变量不更新c#
问题描述
我正在编写一个 C# 程序来显示平均成绩、最高成绩和最低成绩
结果应该是
最高成绩是 90.5
最低成绩是 77.3
平均成绩是 85.633
但不幸的是这样显示
最高成绩是 1.7976931348623157 E+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}");
}
}
}
解决方案
所以你有这个代码来评估每个等级的变量result.Low
和result.High
循环之外:
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;
推荐阅读
- mysql - mysql中存储过程的语法错误
- django - 对于同一循环中的两个对象的循环迭代
- c# - 如何将多个相同类型的字符 ie("lala,,,,lala") 替换为单数 ("lala,lala")
- java - POI条形图生成一个系列有问题
- r - 获取嵌套在列表列表中的变量的总平均值
- javascript - 使用 Flask 后端中的另一个 sql 查询检查复选框重新生成表
- c# - 当前上下文中不存在名称“LikeShop”
- javascript - 如何迭代一组具有相同类名的 HTML 元素并根据字符计数添加一个类并使用 Dojo 添加一个类
- c# - Unity 中 iOS/Android 版本中的热修复错误(补丁)(包括编译的脚本更改)
- asp.net-mvc - 如何在 ReactJs 中使用路由?