java统计数组的均值_Java Array – 计算周围数字的平均值

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

1 2 3

4 5 6

7 8 9

不一定要有任何特定的尺寸,只是显示它,所以你们有一些东西要看.

所以我必须遍历每个数字,并计算它周围的数字的平均值.例如,对于数字1,我​​必须计算平均值2,5和4.我必须将该平均值与数字本身进行比较,但这不是我的问题.我的问题是运行任何大小的数组(由用户确定)并检查它周围的数字.

现在,我可以为每个部分编写一个单独的方法,这意味着每个角落都有一个单独的方法,每个角落都有一个单独的方法,以及一个中心的方法.但这听起来像是更多的工作而且效率低得多.所以,我决定在外面做一个边界.假设0永远不是输入值,此边框将填充0.这样我就不会用完我的数组了,但是我可以在这个边框内部运行一个编码函数,这样它就可以计算出8个周围数字的平均值.

所以我想知道如何通过数组运行并忽略它遇到的任何0,但是取其周围的其他数字的平均值?

例:

0 0 0 0 0

0 1 2 3 0

0 4 5 6 0

0 7 8 9 0

0 0 0 0 0

所以在第一个位置,它取数字2,4和5的平均值,但忽略0.我需要忽略它们的原因是因为:

1.我不能将它们包含在数字计数中,因为即使添加0不会影响总数,它也会影响在获得平均值时除以的数字量.

2.我实际上不会使用0,因为0是可能的输入,它实际上是-1.为了方便打字和可读性,我把0放在这里.

建议最好的方法来解决这个问题?

EDIT2:

所以现在,我得到的输出接近我应该得到的.但是我已经彻底查看了,我无法看到这个错误发生在哪里.

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;

}

在这个函数中,我将数组中的每个值(通过每一行)更改为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 0 255

但我得到了

0 255 0 255 0

0 0 0 0 0

255 0 255 0 255

0 0 0 0 0

255 0 255 0 255

所以我正在研究那些具体的差异,我将会看到问题所在.

解决方法:

So, I’ve decided to make a sort of border around the outside.

琐事 – 丹和Kathy Spacklen(Spacken?)在30年前写过Sargon的时候用棋盘做了这个.

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

1 2 3

4 5 6

7 8 9

假设#1在[0] [0],那么#2周围的8个单元的索引是什么?

标签:java,arrays

来源: https://codeday.me/bug/20190723/1517878.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值