好的,所以我有一个像这样的数组:
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