【问题标题】:Program which counts minimum of a two dimensional int array计算二维 int 数组的最小值的程序
【发布时间】:2019-01-01 15:50:39
【问题描述】:

我正在尝试创建一个程序,它计算二维数组中每个维度的最小值。所以对于前。如果我有一个数组:

int[][] test = {{1,2,3},{2,3,4},{4,5,6}}

程序将显示:[1,2,4] - 每个维度的最小值。 为此,我创建了一个名为 minimum 的方法,如下所示

static int[] minimum(int[][] arr) {
        int[] result = new int [arr.length];
        for (int i = 0; i < arr.length; i++) {
            for(int j = 0; j < arr[i].length; j++) {
                int  min = arr[i][0];
                if(arr[i][j] < min) {
                    min = arr [i][j];
                    result [i] = min;
                } else{

                }
            }
        }
        return result;
    }

但是当我在我的 main 中调用这个方法时,带有一个示例数组

public static void main(String[] args) {
            int[][] arr = {{1,2,3,},{3,4,5},{6,6,6}};
        System.out.println(Arrays.toString(minimum(arr)));


    }

程序显示 [0,0,0,]。您是否知道问题出在哪里以及如何解决?

【问题讨论】:

  • 好吧,int min = arr[i][0]; 需要向上移动一行,到内部循环之外。但我不明白你为什么收到[0,0,0]
  • return Arrays.stream(arr).mapToInt(a -&gt; Arrays.stream(a).min().getAsInt()).toArray();
  • @DawoodibnKareem 结果是[0,0,0],因为if(arr[i][j] &lt; min) 永远不会为真,因为min = arr[i][0] 并且每个子数组的第一个元素是最小的,所以没有任何东西分配给result 数组。
  • 当然。我真傻。
  • @shmosel 不错的 Java 8 实现。

标签: java arrays minimum


【解决方案1】:

问题是如果数组中的第一个元素是 min,它永远不会被记录到结果数组中。试试:

static int[] minimum(int[][] arr) {
    int[] result = new int[arr.length];

    for (int i = 0; i < arr.length; i++) {
        result[i] = arr[i][0];

        for (int j = 1; j < arr[i].length; j++) {
            if (arr[i][j] < result[i]) {
                result[i] = arr[i][j];
            }
        }
    }

    return result;
}

请注意,上述函数的输入矩阵中每行至少需要一个元素;如果您愿意,可以添加条件或使用Integer.MIN_VALUE 处理空行。

【讨论】:

    【解决方案2】:

    这应该可行。您每次都将最小值重置为第一个元素。所以你基本上是在比较是否有任何值小于第一个。

        static int[] minimum(int[][] arr){
            int[] result = new int [arr.length];
            for (int i = 0; i < arr.length; i++){
                result[i] = Integer.MAX_VALUE;
                for(int j = 0; j < arr[i].length; j++){
                    if(arr[i][j] < result[i]) {         
                        result [i] = arr[i][j];
                    }
                }
            }
            return result;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 2017-05-16
      • 2017-10-24
      • 1970-01-01
      • 2016-06-21
      相关资源
      最近更新 更多