使用for循环实现max的奇怪问题

时间:2010-11-07 23:10:45

标签: java loops max

我花了最后一小时对这个问题进行反复试验而无济于事。我们必须使用通用编码指南(如scan.nextDouble)而不是实际数字,找到一定数量的double值的最大值。唯一的问题是我们只能在某一点添加代码。 (......的地方)

double value, valMax;
    int n;
    n = scan.nextInt();
    for(int j = 0; j < n; j++)
    {
       value = scan.nextDouble();
        ...
    }

读入的第一个值是int,它是要输入的双精度数。

这很困难,因为我必须找到一种方法来在循环中初始化valMax而不会弄乱其他任何东西。

这是我一直在使用的,但没有任何工作对我来说。

for(int j = 0; j < n; j++)
   {
      value = scan.nextDouble();
      if(j == 0)
      {
       valMax = scan.nextDouble();
       j++;
      }
      else
      {
       continue;
      }
      if(value >= valMax)
      {
       valMax = value;
      }
   }

示例输入:

5    -4.7  -9.2  -3.1  -8.6  -5.0

其中-3.1是最大值,5是以下数字的计数。

2 个答案:

答案 0 :(得分:1)

您的代码似乎是一个良好的开端。

要帮助解决您的问题,请考虑:

  • 你为什么要加入额外的j++?你真的需要它吗? (提示:否;-))
  • 循环将为j>0做什么(即在第一次迭代之后)?

那应该很快给你一个有效的解决方案。

答案 1 :(得分:0)

您是否可以在循环前设置valMax?因为在这种情况下你可以做到

valMax = Double.MIN_VALUE

通过正常比较value > valMax来忘记奇怪的事情。

如果你不是你的方法,那你应该做两件事:

  • 您不应该关心使用j++进行递增,因为for循环本身会关心它。
  • 拥有else { continue; }会使for的主体跳转到下一次迭代而不关心继续之后的代码。你确定那是你想做的吗?

我认为您可以在第一次迭代(Double.MIN_VALUE)初始化为j == 0并且之后只是正常行为:您唯一需要的是在第一次比较之前初始化valMax值,而不是从stdin扫描之前..