Java - 列多数组中的最高数

Java - Highest number in a column multi-array

看来我在下面的代码中越界了(请参阅带有注释的行)并且我似乎无法解决问题。我是不是忽略了或忘记了什么?

int[][] num = {   {10,2,5},
                  {5,1,0},
                  {25,35,16,20,19},
                  {26,27,100} };

for (int col = 0; col < num.length; col++) {
    int highest = Integer.MIN_VALUE;
    for (int row = 0; row < num[col].length + 1; row++)
        if (num[row][col] > highest) //this is where I get the error.
            highest = num[row][col];
    System.out.println( "Highest number in column " + col + " = " + highest);
}
// Ok, first find the longest row:
int longest = Integer.MIN_VALUE;
for (int[] row : num) {
    longest = Math.max(longest, row.length);
}

// then, create an array to store max column values:
int[] rowHigh = new int[longest];
for (int i = 0; i < longest; i++) {
    rowHigh[i] = Integer.MIN_VALUE;
}

// then iterate over initial array to find max values of each column
for (int[] row : num) {
    for (int i = 0; i < row.length; i++) {
        rowHigh[i] = Math.max(rowHigh[i], row[i]);
    }
}

为了找到每列的最大数量,首先你必须找到最长的行,以便知道你的外循环的范围应该是什么:

int longestRow = 0;
for (int row = 0; row < num.length; row++)
    if (num[row].length > longestRow)
        longestRow = num[row].length;

然后您可以遍历每一列,但是您必须检查到达的每一行当前列是否存在于该行中:

for ( int col = 0; col < longestRow; col++)
{
   int highest = Integer.MIN_VALUE;
   for ( int row = 0; row < num.length; row++)
        if ( col < num[row].length && num[row][col] > highest) 
            highest = num[row][col];
    System.out.println( "Highest number in column " + col + " = " + highest);
}

输出:

Highest number in column 0 = 26
Highest number in column 1 = 35
Highest number in column 2 = 100
Highest number in column 3 = 20
Highest number in column 4 = 19

在二维数组中,像你的 num[a][b],array.length 给出行数。 要获取 row[i] 中的列数,请使用:array[i].length。即获取第 i 行的列数

使用以下代码: int[][] num = { {10,2,5}, {5,1,0}, {25,35,16,20,19}, {26,27,100} };

    int highest = Integer.MIN_VALUE;
    int row = 0 ,col = 0;
     for ( row = 0; row < num.length; row++ )
     {
         for ( col = 0; col < num[row].length; col++ )
             if (num[row][col] > highest )
                 highest = num[row][col];
     }
     System.out.println( "Highest number in row:"+row+" column:" + col + ". Highest value is: " + highest );

使用 Java 8

int[][] num = {{10, 2, 5},
        {5, 1, 0},
        {25, 35, 16, 20, 19},
        {26, 27, 100}};


int max = Stream.of(num) // give me a stream of int[]
                // unpack those int[] into an IntStream
                .flatMapToInt(arr -> IntStream.of(arr))
                // find the maximum.
                .max()
                // as a plain int value.
                .getAsInt();
System.out.println(max);