我有一个2D数组,我试图计算每列的最小值并将结果放在结果数组中。
下面的代码正在计算每行的最小值,我怎样才能得到每列的最小值。
import java.util.*;
class Test20 {
public static void main ( String [] args) {
int[][] array = {{6,3,9},
{0,8,2},
{3,7,5}};
Test20 test = new Test20();
System.out.print(Arrays.toString(test.mincol(array)));
}
public static int[] mincol (int[][] n) {
int[] result = new int[n.length];
for (int i = 0; i < n.length; i++) {
int min = n[0][i];
for (int j = 0; j < n[0].length; j++) {
if (n[j][i] < min) {
min = n[j][i];
}
}
result[i] = min;
}
return result;
}
}
答案 0 :(得分:0)
只需按以下方式更改循环:
min = 0;
for(int i=0;i<n.length;i++){
for(int j=0;j<n[0].length;j++){
if(n[j][i]<n[j][min]){
min=j;
}
result[i]=n[min][i];
}
请注意,您按照数组中第一个维度的长度实例化结果数组,但稍后使用n [] []参数进行循环并访问循环中第二个维度的长度。
如果您的两个昏暗数组是例如4x5,则会导致ArrayOutOfBoundsExceptions。
答案 1 :(得分:0)
你的for循环看起来不错。检查下面的代码我修复了一些小问题。
根据您的代码替换下面的类代码:
public class Test {
public static void main(String[] args) {
int[][]array={{6,1,9}, {0,1,2}, {3,7,5}};
int[] test;
test = minrow(array);
for(int i=0; i<test.length; i++){
System.out.println(test[i]);
}
}
public static int[] minrow(int[][] n){
int [] result = new int[n.length];
int min;
for(int i=0;i<n.length;i++){
min=0;
for(int j=0;j<n[i].length;j++){
if(n[i][j]<n[i][min]){
min=j;
}
}
result[i]=n[i][min];
}
return result;
}
}
答案 2 :(得分:0)
你只需要做同样的事情但是反转变量
for(int i=0;i<n.length;i++){
for(int j=0;j<n[0].length;j++){
if(n[j][i]<n[min][j]){
min=i;
}
result[j]=n[min][j];
}
}
答案 3 :(得分:0)
如果您的代码正确,只需更改:
if(n[i][j]<n[i][min]){
min=j;
}
带
if(n[i][j]<n[result[i]][j]){
result[i]=i;
}
终于
for(int i=0;i<n.length;i++) result[i]=n[result[i][j];
你不需要min
。但改变
int [] result = new int[n.length];
到
int [] result = new int[n[0].length];
答案 4 :(得分:0)
你如何转置你的二维数组:
public static int[][] transpose (int[][] original) {
int[][] array = new int[original.length][];
// transpose
if (original.length > 0) {
for (int i = 0; i < original[0].length; i++) {
array[i] = new int[original[i].length];
for (int j = 0; j < original.length; j++) {
array[i][j] = original[j][i];
}
}
}
return array;
}
然后将其命名为:
System.out.print(Arrays.toString(test.minrow(transpose(array))));
或者,如果你想没有转置,你可以这样做:
public static int[] mincol (int[][] n) {
int[] result = new int[n.length];
for (int i = 0; i < n.length; i++) {
int min = n[0][i];
for (int j = 0; j < n[0].length; j++) {
if (n[j][i] < min) {
min = n[j][i];
}
}
result[i] = min;
}
return result;
}