Java如何找到2d数组的中间
我正在编写一个函数,试图找到2d数组的中间部分,到目前为止,我得到的是:Java如何找到2d数组的中间,java,arrays,multidimensional-array,compiler-errors,Java,Arrays,Multidimensional Array,Compiler Errors,我正在编写一个函数,试图找到2d数组的中间部分,到目前为止,我得到的是: int findMiddle(int[][] grid,int [] m) { int[] list = new int[grid.length*grid[0].length]; int listPos = 0; for(int i = 0 ; i < grid.length; i++) { for(int j = 0; j < grid.length; j++) {
int findMiddle(int[][] grid,int [] m) {
int[] list = new int[grid.length*grid[0].length];
int listPos = 0;
for(int i = 0 ; i < grid.length; i++) {
for(int j = 0; j < grid.length; j++) {
list[listPos++] = grid[i][j];
}
}
int middle = m.length/2;
if (m.length%2 == 1) {
return m[middle];
} else {
return (m[middle-1] + m[middle]) / 2.0;
}
}
它应该返回6,因为它是整数除法。
此外,在这段代码中,middle的定义是整个原始数组的中间整数(不用说它是否被排序)
我该怎么做?(我的代码也不编译)这将编译,并将给出序列中的中间数,或者如果将中间数拆分,则给出中间两个数的平均值:
static double findMiddle(int[][] grid) {
int[] list = new int[grid.length*grid[0].length];
int listPos = 0;
for(int i = 0 ; i < grid.length; i++) {
for(int j = 0; j < grid[i].length; j++) {
list[listPos++] = grid[i][j];
}
}
int middle = list.length/2;
if ((list.length%2) == 1) {
return list[middle];
}
return (list[middle-1] + list[middle]) / 2.0;
}
静态双findmddle(int[]]grid){
int[]list=new int[grid.length*grid[0].length];
int-listPos=0;
对于(int i=0;i
但是,我怀疑在将数字合并到一个数组中之后,在找到中间的数字之前,您会希望对这些数字进行排序。(正如piyush121所评论的)假设您对“中间值”的定义是正确的(奇数长度集的中间数或偶数长度集的两个中间数的平均值),并且如果网格[]已排序,并且网格[]是方形数组(即grid.length=grid[i].length,则不需要将数据复制到另一个数组。以下内容应足够:
static int findMiddle(int[][] grid) {
int l = grid.length;
if (l%2 == 1) {
return grid[l/2][l/2];
} else {
return (grid[l/2-1][l-1]+grid[l/2][0])/2;
};
查看您现有的代码,如果所有值都放在一个单行列表中,您似乎将“中值”定义为矩阵中的中间值。换句话说,您不需要处理奇数行(当同一列中的两个数字位于中间时)或奇数行和列(中间有四个数字时) 如果该定义是正确的,那么您可以通过流式传输所有值,然后选择中间的值来处理不均匀行的所有复杂性 出于您的兴趣,这里有一个Java 8解决方案可以做到这一点:
int[] flat = Arrays.stream(grid).flatMapToInt(Arrays::stream).toArray();
double middle = Arrays.stream(flat).skip(flat.length / 2).limit(1 + flat.length % 2)
.average().getAsDouble();
数组是按行排序的吗?如果不是,你可以按行排序,然后取中间列的中间元素。冒泡排序,然后取中间数组的中间值。哈。我认为你误用了“中值”一词,让人们感到困惑。你的意思是你想要数组的中间值,而不是统计学家的中值从逻辑上讲,我建议你把问题中的“中间值”改为“中间值”,以避免混淆。我忘了说在找到中间值之前不需要对数组进行排序
int[] flat = Arrays.stream(grid).flatMapToInt(Arrays::stream).toArray();
double middle = Arrays.stream(flat).skip(flat.length / 2).limit(1 + flat.length % 2)
.average().getAsDouble();