如何在不使用 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。那应该是GameCountNumberOfGames。 (2) 在计数器减一的情况下设置一个循环,然后从中减去 1 来纠正这个问题,这是非常奇怪的。更正常的做法是从 0 循环到 length,而不是从 1 循环到 length + 1,然后从索引中减去 1。 (3) 你的代码看起来不对。我假设 gamescores[i] 是一个 int 并且游戏数是一个 int,但是 int 除以 int 是 int,而不是 double。更常见的解决方案是先计算总和,然后将总和转换为双倍,然后将总和除以游戏数,以获得准确的双倍。你现在做的是加前四舍五入,加前四舍五入意味着你加了错误的值,所以总和也是错误的,因此平均值也是错误的会错的。 【参考方案1】:

循环游戏就像你做平均一样,但在你循环之前,有一个变量像minScoremaxScore你初始化为1或其他东西。然后在循环中检查分数是否小于或大于最小值或最大值。如果是,请更新最小值/最大值。

类似这样的:

int min = gameScores[0]; 
for (int gameCounter = 1; gameCounter < gameScores.Length + 1; gameCounter++)

    if (gameScores[gameCounter] < min)
        min = gameScores[gameCounter];

【讨论】:

我想你的意思是在你的循环中只是gameCounter &lt; 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 对表中的每一列调用内置函数?

如何在不调用索引函数或任何内置函数的情况下获取列表中的索引?

在不使用javascript中的内置函数的情况下逐字反转字符串

如何在不使用任何内置高斯函数的情况下对图像进行高斯模糊?

在不使用内置函数的情况下生成随机数 [关闭]

如何在不使用内置函数的情况下计算数字的平方根? [重复]