【问题标题】:min and max value in 2d array java二维数组java中的最小值和最大值
【发布时间】:2015-04-05 06:50:04
【问题描述】:

我想输出二维数组的最大值和最小值。 Max 运行良好,但即使数组中没有零,min 也始终输出零。我将 Math.random() 设置为 99,以防止在此示例中在数组中获得零的机会更小。以下是完整代码:

public class e {

public static void main(String[] args)   {

    int a[][] = new int [5][5];
    int l = a[0][0];
    int m = a[0][0];
    int i,j,r,k;


    for(i=0;i<a.length;i++)                   // 
        for(j=0;j<a[i].length;j++){           // 2d array random number generator
            a[i][j] =(int)(Math.random()*99); //
         }
    for(i=0;i<a.length;i++){               //
        for(j=0;j<a[i].length;j++)         //
                                           // create 2d array and output it
    System.out.print(a[i][j] + "\t");      //   
    System.out.println();                  //

}
    System.out.println("\t"); 
        for(r=0;r<a.length;r++){           //
            for(k=0;k<a.length;k++)        //
                if(a[r][k] < m){           // finds a min value
                    m = a[r][k];           //

            }
        }

    System.out.println("\t");               // 
        for(i=0;i<a.length;i++){            //
            for(j=0;j<a.length;j++)         // finds a max value
                if(a[i][j] > l){            //
                    l = a[i][j];            //

            }
        }
    System.out.println("min value is " + m); //outputs min value
    System.out.println("max value is " + l); // outputs max value
            }
       }

【问题讨论】:

  • 将值更改为随机数后,数组中可能没有零,但是当您使用 int m = a[0][0]; 初始化 m 时,数组中肯定有零,这就是为什么 m 仍然存在0 打印时。
  • @jedwards 这不是问题,在m = a[0][0] 它只是定义了二维数组中的第一个整数
  • 这绝对是问题所在。当您在那里初始化 m 时,a[0][0] 为 0。因此,当您运行循环时,您永远不会找到小于 m 的值,因此 m 保持不变为 0。通过使用安迪的解决方案(这是正确的) ,您将 m 重新分配为矩阵中的任意值,从而使您的循环能够正确找到最小值。
  • @jedwards ou 现在我明白了,我的错误,现在我明白了,感谢您的回复和向我解释

标签: java arrays java-2d


【解决方案1】:

由于您在a 中选择随机值的方式,不会有小于零的值 - 但也不能保证任何值都完全为零。但是,您将m 初始化为零,因为这是数组元素的默认值;没有比这更小的了,所以答案总是零。

您应该在开始标记为“找到最小值”的块中的外部 for 循环之前立即初始化您的 m = a[0][0],即

    m = a[0][0];
    for(r=0;r<a.length;r++){           //
        for(k=0;k<a.length;k++)        //
            if(a[r][k] < m){           // finds a min value
                m = a[r][k];           //

        }
    }

或者,您可以设置m = Integer.MAX_VALUE(和l = Integer.MIN_VALUE),因为它们的值可以保证分别小于和大于它们。

【讨论】:

  • 你是对的,但你能解释一下为什么它适用于 max,但不适用于 min?
  • 您的随机值在 0..99 范围内,因此即使在所有随机值都设置为零的极不可能的情况下,l 的初始值也小于或等于到实际最大值。
猜你喜欢
  • 2017-03-16
  • 1970-01-01
  • 2016-06-21
  • 2017-09-28
  • 2019-03-31
  • 2022-01-12
  • 2018-09-14
  • 2015-02-01
  • 1970-01-01
相关资源
最近更新 更多