我正在尝试创建一个程序,该程序计算二维数组中每个维的最小值。所以对于前。如果我有一个数组:
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;
}
但是当我在我的主体中用示例数组调用此方法时
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,]。您是否有问题的根源以及如何解决?
答案 0 :(得分:3)
问题是,如果数组中的第一个元素为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
处理空行。
答案 1 :(得分:0)
这应该有效。每次将最小值重置为第一个元素。因此,您基本上是在比较是否有小于第一个的值。
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;
}