【问题标题】:Finding lowest Value in one dim array using iteration (Can't use max/min)使用迭代在一个暗淡数组中查找最小值(不能使用最大值/最小值)
【发布时间】:2015-04-03 06:34:13
【问题描述】:

我目前正在学校学习 c#。

我的导师要求我:

  • 使用迭代确定一维数组的最小值。
  • 我不能使用常规方法,例如 max 或 min 函数。必须使用迭代来完成。
  • 我正在从用户输入中获取数组值。

    这是我下面的,但我觉得这不是他真正想要的。 - 编辑 - 我不能使用最大值属性。这超出了他所教的范围。对于那些正在寻找更具体问题的人。

没有向我展示完整的代码示例。在不使用最小值或最大值属性的情况下,我有哪些其他方法可以解决这个问题?

我很抱歉没有比这更清楚。这只是我在课程中的第三周,所以我对编程的总体理解非常低。

    while (j < myDoubles.Length)
    {
    double myDoubles1 = myDoubles[j];
    j++;
    double myDoubles2 = myDoubles[j];
    j++;
    double myDoubles3 = myDoubles[j];
    j++;
    double myDoubles4 = myDoubles[j];
    j++;
    double myDoubles5 = myDoubles[j];
    j++;

    while (myDoubles1 < myDoubles2 && myDoubles1 < myDoubles3 && myDoubles1 < myDoubles4 && myDoubles1 < myDoubles5)
    {
      Console.WriteLine("myDoubles[1] is the lowest");
      break;
    }
    while (myDoubles2 < myDoubles1 && myDoubles2 < myDoubles3 && myDoubles2 < myDoubles4 && myDoubles2 < myDoubles5)
    {
      Console.WriteLine("myDoubles[2] is the lowest");
      break;
    }
    while (myDoubles3 < myDoubles1 && myDoubles3 < myDoubles2 && myDoubles3 < myDoubles4 && myDoubles3 < myDoubles5)
    {
      Console.WriteLine("myDoubles[3] is the lowest");
      break;
    }
    while (myDoubles4 < myDoubles1 && myDoubles4 < myDoubles2 && myDoubles4 < myDoubles3 && myDoubles4 < myDoubles5)
    {
      Console.WriteLine("myDoubles[4] is the lowest");
      break;
    }
    while (myDoubles5 < myDoubles1 && myDoubles5 < myDoubles2 && myDoubles5 < myDoubles3 && myDoubles5 < myDoubles4)
    {
      Console.WriteLine("myDoubles[5] is the lowest");
      break;
    }

【问题讨论】:

  • 提示:你在一个循环中,但是做同样的事情 5 次。您不需要 5 个不同的变量,您需要将当前值与 到目前为止 的最低值进行比较。
  • 如果我是教练,这绝对不是我期望得到的回报......
  • 尝试使用forforeach 循环执行此操作。提示:你需要在循环之前声明一个变量。
  • 我认为他正在为我寻找其他方法来完成此任务。我认为我实际上并没有展示如何正确使用迭代来解决这个问题。这更像是我在操纵循环,使其更像是一个 if 而不是决策过程。
  • 从这个开始:编写一个for循环,迭代数组并将每个元素输出到屏幕。每次循环迭代,您应该只访问数组的一个元素。

标签: c# arrays loops iteration


【解决方案1】:

试试这个:

double minValue(double[] myDoubles){
    double min = Double.MaxValue;
    for(int i=0; i<myDoubles.Length; i++)
    {
        if(myDoubles[i]<min)
            min = myDoubles[i];
    }
    return min;
}

您需要将min 变量设置为MaxValue,因为您不知道最大值是多少。例如,如果您的用户给您 1000 的最小值,但您将变量设置为 0,则最终的最小值将为 0,这显然是错误的!

【讨论】:

  • 由于他“不寻求解决方案”(引用自 OP),这不是“答案”。但实际上他的问题确实不是很清楚。所以我想这可能是……最好的选择。
  • @Matmarbon 我知道,但这可能有助于他理解如何做到这一点:)
  • Ludovic,我想你在这里帮了我很多。虽然,我不能使用 MaxValue 属性,但我相信我可以使用其他方式找到它,谢谢。
  • @Michael 我认为 Greg 给出了一个非常好的答案,可空变量看看它
  • 对于如何实现这一点似乎有很多任意和不寻常的要求。
【解决方案2】:

您不能简单地执行以下操作:这是为了找到最大值

public static double? FindMaximum(double[] container)
{
     double? max = null;
     foreach(var content in contaner)
         if(content > max || max == null)
              max = content as double;

     return max;
}

这种方法非常简单,您遍历数组中的每个项目。然后将最大值与内容进行比较,如果它高于之前的值,它将修改变量。然后返回数组中的最大值。

这不是一种理想的方法,而是一种解决方案。

【讨论】:

  • 他要的是最小值
  • 即使达到最大值,您的解决方案也不起作用。如果最大值小于0
  • @Ludovic 我知道他正在寻找最小值,我提供了另一种方法,所以我不做他的工作。如果max 小于您的数组项,它将修改。修复了十进制方法,我试图创建一个简单的解决方案而不是具体的解决方案,因为我不知道他的限制。
  • 好的,但是你能指定你正在做的事情与他想要的相反吗?我会删除我的反对票;)
  • 完成了,你可能想澄清一下为什么在你的替身到达你的循环之前打电话给maxValue,以便他理解。
【解决方案3】:

我最终这样做了,完全满足了老师的要求。感谢 Greg 和 Ludovic 提供的示例。在找出这项作业的答案时,您帮了很大的忙!

 int j = 0;
 double min = 0; 
 for (int i = 0; i < myDoubles.Length; i++)
  {
    if (i == 0)
    {
      min = myDoubles[i];
    }
    else if (min > myDoubles[i])
    {
      min = myDoubles[i];
      j = i;
    }
  }
  Console.WriteLine("myDoubles[{0}] = {1} is the lowest value in the array", j, min);

【讨论】:

    猜你喜欢
    • 2014-06-26
    • 2010-09-18
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 2018-05-03
    • 2020-06-17
    • 2018-09-11
    相关资源
    最近更新 更多