查找二维数组的最大值和最小值

新手上路,请多包涵

这是原始提示:

在 milesTracker 中找到最大值和最小值。将最大值分配给 maxMiles,将最小值分配给 minMiles。给定程序的示例输出:

>  Min miles: -10
> Max miles: 40
>
> ```

这是我的代码:

import java.util.Scanner;

public class ArraysKeyValue { public static void main (String [] args) { final int NUM_ROWS = 2; final int NUM_COLS = 2; int [][] milesTracker = new int[NUM_ROWS][NUM_COLS]; int i = 0; int j = 0; int maxMiles = 0; int minMiles = 0;

milesTracker[0][0] = -10;
milesTracker[0][1] = 20;
milesTracker[1][0] = 30;
milesTracker[1][1] = 40;

for(i=0;i<NUM_ROWS;++i) {

   for(j=0;j<NUM_COLS;++j) {

      if (milesTracker[i][j]<minMiles){
          minMiles = milesTracker[i][j];
      }
      else if (milesTracker[i][j] > maxMiles){
          maxMiles = milesTracker[i][j];
      }
   }
}

System.out.println("Min miles: " + minMiles);
System.out.println("Max miles: " + maxMiles);

} }


这是输出:

Testing with milesTracker = {{-10, 20}, {30, 40}}


你的输出:

Min miles: -10 Max miles: 40

Testing with milesTracker = {{73, 0}}


你的输出:

Min miles: 0 Max miles: 73

✖ Testing with milesTracker = {{-5}, {-93}, {-259}}


预期输出:

Min miles: -259 Max miles: -5


你的输出:

Min miles: -259 Max miles: 0

”`

为什么最后一次测试失败了?

原文由 java2019 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 706
2 个回答

作为@Fikolev 回答的补充:如果只允许编辑循环体,则可以将初始化移到那里:

 for(i=0;i<NUM_ROWS;++i) {
  for(j=0;j<NUM_COLS;++j) {
    if (i == 0 && j == 0) {
      maxMiles = Integer.MIN_VALUE;
      minMiles = Integer.MAX_VALUE;
    }
  ...

原文由 choeger 发布,翻译遵循 CC BY-SA 3.0 许可协议

您需要以不同方式初始化初始值。

 int maxMiles = Integer.MIN_VALUE;
int minMiles = Integer.MAX_VALUE;

将它们都初始化为 0 会导致问题,正如您在示例中看到的那样,矩阵中只有负值。如果你只有正数, minMiles 将保持为 0 并且是错误的,因为你永远不会得到小于初始 0 的值。

对于 minValue 您需要确保数组中的任何值都小于初始值,因此您将其分配给您使用的类型的最大可能值。对于 maxValue 相反。

另一个可能的错误是 else if 条件。

 if (milesTracker[i][j] < minMiles) {
    minMiles = milesTracker[i][j];
} else if (milesTracker[i][j] > maxMiles) {
    maxMiles = milesTracker[i][j];
}

这两者并不相互排斥。如果您得到的数字既大于当前的 maxMiles 又小于当前的 minMiles 怎么办?它肯定会发生,并且您将无法更新其中之一,在您的情况下 - maxMiles

原文由 Filkolev 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题