Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java数组-计算周围数字的平均值_Java_Arrays - Fatal编程技术网

Java数组-计算周围数字的平均值

Java数组-计算周围数字的平均值,java,arrays,Java,Arrays,好的,我有一个这样的数组: 1 2 3 4.56 7 8 9 不一定要有任何具体的尺寸,只是展示给大家看。 所以我必须遍历每一个数字,然后计算它周围数字的平均值。例如,对于数字1,我必须计算2、5和4的平均值。我必须将平均数与数字本身进行比较,但这不是我的问题。我的问题是运行一个任意大小的数组(由用户决定),并检查它周围的数字。 现在,我可以为每个部分编写一个单独的方法,这意味着每个角都有一个单独的方法,每个边都有一个单独的方法,中间也有一个方法。但这听起来好像要做更多的工作,效率要低很多。所以

好的,我有一个这样的数组:

1 2 3
4.56
7 8 9

不一定要有任何具体的尺寸,只是展示给大家看。 所以我必须遍历每一个数字,然后计算它周围数字的平均值。例如,对于数字1,我必须计算2、5和4的平均值。我必须将平均数与数字本身进行比较,但这不是我的问题。我的问题是运行一个任意大小的数组(由用户决定),并检查它周围的数字。 现在,我可以为每个部分编写一个单独的方法,这意味着每个角都有一个单独的方法,每个边都有一个单独的方法,中间也有一个方法。但这听起来好像要做更多的工作,效率要低很多。所以,我决定在外面做一个边界。此边框将用0填充,假设0永远不会是输入值。这样我就不会耗尽数组,但我可以在这个边界的内部运行一个编码函数,这样它就可以计算周围8个数字的平均值

所以我想知道我怎么能在一个数组中运行,忽略它遇到的任何0,但取它周围其他数字的平均值

示例:
0
01 2 3 0
04560
07890
0 0 0 0

所以在第一个点,取数字2、4和5的平均值,但忽略0。我需要忽略它们的原因是:
1.我不能将它们包括在数字计数中,因为即使加0不会影响总数,但会影响在获得平均值时要除以的数字量
2.我不会实际使用0,因为0是一个可能的输入,它实际上是-1。为了便于键入和可读性,我在这里放置了0

建议进行此操作的最佳方法

编辑2:

现在,我得到了一个接近我应该得到的输出。但我已经彻底检查过了,我看不出这个错误是从哪里来的

public static int calculate(int[][] array, int row, int col){
    double num = 0;//Used to find the total of real numbers to be divided by
    double total = 0;
    double average;

    for (int a = -1; a <= 1; a++) 
    {
        for (int b = -1; b <= 1; b++) 
        {
            if(row + a < 0 || col + b < 0)
            {
                continue;
            }
            if(a == 0 && b == 0)//if(row + a == row || col + b == col)
            {
                continue;
            }
            if(row + a >= r || col + b >= c)
            {
                continue;
            }
            else
            {                   
                num+=1;
                total+= array[row + a][b + col];
                System.out.println("row+a = " + (row + a) + " and col+b = " + (col + b));
            }
        }
     }

    average = (double)(total/num);
    count++;
    System.out.print(count + ". Average = " + total + " divided by " + num + " = " + average + "\n");

    if (average < array[row][col])
        return 255;
    else
        return 0;
}
公共静态int计算(int[][]数组、int行、int列){
double num=0;//用于查找要除以的实数总数
双倍合计=0;
双倍平均;
对于(int a=-1;a=c)
{
继续;
}
其他的
{                   
num+=1;
合计+=数组[行+列][b+列];
System.out.println(“行+a=“+(行+a)+”和列+b=“+(列+b));
}
}
}
平均值=(两倍)(总数/数量);
计数++;
系统输出打印(计数+”.Average=“+total+”除以“+num+”=“+Average+”\n”);
if(平均值<数组[行][列])
返回255;
其他的
返回0;
}
在这个函数中,我将数组中的每个值(遍历每一行)更改为0或255。 显然,正确的最终结果应该是: 0 255 0 255 0

0 0 255 0 0

255 0 255 0 255

255 0 0 0 0

0 255 0 255

但是我越来越

0 255 0 255 0

0 0 0 0

255 0 255 0 255

0 0 0 0

255 0 255 0 255

因此,我正在研究这些具体的差异,我将看看问题在哪里

所以,我决定在外面做一个边界

琐事-丹和凯西·斯帕克伦(斯帕肯?)在30年前写《萨尔贡》时就在棋盘上做了这些

你可以去边境,但我认为这不会有多大帮助。告诉我,在你的第一个例子中

1 2 3
4 5 6
7 8 9

假设#1位于[0][0],围绕#2的8个单元格的索引是什么?

在我看来,最简单的解决方案是在一个循环中遍历所有可能的单元格,并让每个单元格查看它是否在矩阵中。它并不是很短,但并没有难看的不可读的条件,你们也不需要用任何东西围绕矩阵

int sum = 0;
int amount = 0;
for (int di = -1; di <= 1; ++di) {
    for (int dj = -1; dj <= 1; ++dj) {
        // check that cell (i0 + di, j0 + dj) is inside the matrix
        // and not the original cell (i0, j0)
        // increase 'sum' and 'amount' if necessary
    }
}

return (double) sum / amount;
int和=0;
整数金额=0;

对于(int di=-1;di而言,以下是我用来确定细胞是否存活或死亡的代码

私有静态布尔生命(点p,字节[][]平方){
int liveneightors=0;
对于(inti=p.x-1;i
您可以调整它,将数字相加并返回平均值,而不是单元格是否应该生存或死亡

这需要在如下循环中调用:

for(int i = 0;  i < arr.length; i++) {
    for (int j = 0;j < arr[0].length; j++) {
        lives(new Point(i,j), arr);
    }
}
for(int i=0;i
如果这是作业,请添加作业标签plsassuming[r][c]-->[-1][0]、-1][1]、-1][2]、[0][0]、[1][1]、[1][2]、[1][3]、[0][3]很好。现在,有些价值观是不可能的。为什么?只要简单地做你头脑中清晰的循环,忽略那些不可能的价值观。那么你就是金色的。所以我的想法是,对每一种可能性进行分析,但不会说“忽略那些不可能的价值观”是否在数组之外运行?或者Java中是否有方法检查该位置是否不存在?它们在数组之外。这就是为什么它们很容易被检测到的原因。在您发布的3条注释列表中,您如何知道第一个元素是不可能的?在您将数字包含在平均值中之前,请确保其索引不是不可能的。我似乎是这样认为的以我现在修改代码的方式得到答案,但我不确定是否正确
for(int i = 0;  i < arr.length; i++) {
    for (int j = 0;j < arr[0].length; j++) {
        lives(new Point(i,j), arr);
    }
}