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