如何在不使用 c# 中的内置函数的情况下获得投球手的最低和最高分数
Posted
技术标签:
【中文标题】如何在不使用 c# 中的内置函数的情况下获得投球手的最低和最高分数【英文标题】:How would I get the Min and Max scores of the bowlers without using the built in function in c# 【发布时间】:2020-03-09 16:35:20 【问题描述】:我被困在如何获得分数的最小值和最大值上,因为我们不允许使用内置函数来完成我们的作业,我的平均工作良好,这些是我作业中唯一缺少的部分。
double game average = 0
for (int gameCounter = 1; gameCounter < gameScores.Length + 1; gameCounter++)
gameAverage += (gameScores[gameCounter - 1] / NUMBER_OF_GAMES);
【问题讨论】:
使用foreach (var score in gameScores)
之类的代码在数组中循环通常更容易,就像您正在做的那样尝试添加和减去索引。
我不敢相信你的老师让你使用goto
...
假设我递给您一张保龄球记分卡,并要求您确定最小值和最大值。 仔细描述你将如何在不使用计算机的情况下做到这一点。如果你能做到这一点,那么你就可以描述计算机应该如何做到这一点。
当我们查看您的代码时:今天将是养成好习惯的好日子,这样您以后就不必再打破它们了。 (1) 我们在 C# 中不使用 SHOUTING_SNAKE_FORM。那应该是GameCount
或NumberOfGames
。 (2) 在计数器减一的情况下设置一个循环,然后从中减去 1 来纠正这个问题,这是非常奇怪的。更正常的做法是从 0 循环到 length,而不是从 1 循环到 length + 1,然后从索引中减去 1。
(3) 你的代码看起来不对。我假设 gamescores[i] 是一个 int 并且游戏数是一个 int,但是 int 除以 int 是 int,而不是 double。更常见的解决方案是先计算总和,然后将总和转换为双倍,然后将总和除以游戏数,以获得准确的双倍。你现在做的是加前四舍五入,加前四舍五入意味着你加了错误的值,所以总和也是错误的,因此平均值也是错误的会错的。
【参考方案1】:
循环游戏就像你做平均一样,但在你循环之前,有一个变量像minScore
或maxScore
你初始化为1或其他东西。然后在循环中检查分数是否小于或大于最小值或最大值。如果是,请更新最小值/最大值。
类似这样的:
int min = gameScores[0];
for (int gameCounter = 1; gameCounter < gameScores.Length + 1; gameCounter++)
if (gameScores[gameCounter] < min)
min = gameScores[gameCounter];
【讨论】:
我想你的意思是在你的循环中只是gameCounter < gameScores.Length
?否则每次都会出界
感谢您的帮助!
@DStanley,我刚刚从 OP 的问题中复制了代码 +1
,因为它们从 1
开始循环。但是,是的,如果你从0
开始(像大多数人一样),你是对的。【参考方案2】:
只需将最小值和最大值存储为第一个值,并将下一个值与当前值进行比较
double gameMin = Double.MaxValue;
double gameMax = Double.MinValue;
for (int gameCounter = 1; gameCounter < gameScores.Length + 1; gameCounter++)
gameMin = gameMin > gameScores[gameCounter - 1] ? gameScores[gameCounter - 1] : gameMin
gameMax = gameMax < gameScores[gameCounter - 1] ? gameScores[gameCounter - 1] : gameMax
gameAverage += (gameScores[gameCounter - 1] / NUMBER_OF_GAMES);
?
是 c# 中的一个运算符,可以像我上面那样快速编写 if 语句。
见:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/conditional-operator
但是,在您的代码中,您也可以像这样清理 for 循环定义:
for (int gameCounter = 0; gameCounter < gameScores.Length; gameCounter++)
这里不加 1 以后不用减 1
比较字符串的最佳做法是使用.equals()
像这样:
bowler.Equals("Y")
【讨论】:
感谢您对我的帮助 @Joshua 你感谢人们点击答案左上角的绿色复选标记。以上是关于如何在不使用 c# 中的内置函数的情况下获得投球手的最低和最高分数的主要内容,如果未能解决你的问题,请参考以下文章
如何在不指定列名的情况下使用 bigquery 对表中的每一列调用内置函数?
如何在不调用索引函数或任何内置函数的情况下获取列表中的索引?