I am writing a program that deals with a 2D array, does calculations based on surrounding elements and then creates a new array. To start I created a simple java program to test different cases. I want to correctly deal with if the element is on an edge of the array and if so set the "up, down, left, or right"
equal to that element. My test program works for the element being on the top, left, or not on an edge, but not for the bottom or right. This is my current code:
我正在编写一个处理2D数组的程序,根据周围的元素进行计算,然后创建一个新的数组。首先,我创建了一个简单的java程序来测试不同的情况。我想要正确地处理元素是否在数组的边缘,如果是,那么将“up, down, left,或right”设置为该元素。我的测试程序适用于元素位于顶部、左侧或不位于边缘,但不适用于底部或右侧。这是我目前的代码:
public class ArrayTest
{
public static void buildE(int[][] array, int y, int x)
{
int up;
int down;
int left;
int right;
//if element is on the top left
if (y == 0 && x == 0)
{
up = array[y][x];
down = array[y + 1][x];
left = array[y][x];
right = array[y][x + 1];
}
//if element is on bottom right
else if (y == array.length && x == array.length)
{
up = array[y - 1][x];
down = array[y][x];
left = array[y][x - 1];
right = array[y][x];
}
//if element is on top right
else if(y == 0 && x == array.length)
{
up = array[y][x];
down = array[y + 1][x];
left = array[y][x - 1];
right = array[y][x];
}
//if element is on bottom left
else if (y == array.length && x == 0)
{
up = array[y - 1][x];
down = array[y][x];
left = array[y][x];
right = array[y][x + 1];
}
//if element is on top
else if (y == 0)
{
up = array[y][x];
down = array[y + 1][x];
left = array[y][x - 1];
right = array[y][x + 1];
}
//if element is on left
else if (x == 0)
{
up = array[y - 1][x];
down = array[y + 1][x];
left = array[y][x];
right = array[y][x + 1];
}
//if element is on bottom
else if(y == array.length)
{
up = array[y - 1][x];
down = array[y][x];
left = array[y][x - 1];
right = array[y][x + 1];
}
//if element is on right
else if (x == array.length)
{
up = array[y - 1][x];
down = array[y + 1][x];
left = array[y][x - 1];
right = array[y][x];
}
//if element is not on an edge
else
{
up = array[y - 1][x];
down = array[y + 1][x];
left = array[y][x - 1];
right = array[y][x + 1];
}
System.out.println();
System.out.print("#####################################");
System.out.println();
System.out.println("Array Element: " + array[y][x]);
System.out.println("Up: " + up);
System.out.println("Down: " + down);
System.out.println("Left: " + left);
System.out.println("Right: " + right);
}
public static void outputArray(int[][] array)
{
for(int row = 0; row < array.length; row ++)
{
for (int column = 0; column < array[row].length; column++)
System.out.printf("%d ", array[row][column]);
System.out.println();
}
}
public static void main(String[] args)
{
int [][] myArray = {{1, 12, 13, 14, 15}, {2, 22, 23, 24, 25},
{3, 32, 33, 34, 35}, {4, 42, 43, 44, 45}, {5, 52, 53, 54, 55}};
outputArray(myArray);
buildE(myArray, 4, 0);
}
}
Furthermore if I set y = 4
it does not recognize this as myArray.length
. However I do not think this will be an issue in my actual program if I iterate through until array.length
. Any help would be much appreciated!
此外,如果我设y = 4,它不会识别这个为myarray。length。但是,我不认为这在我的实际程序中是一个问题,如果我遍历到array.length。如有任何帮助,我们将不胜感激!
2 个解决方案
#1
4
array indexes start from 0, if your array is of length 5, the last elemnt will be accessed at 4th index. in your code
数组索引从0开始,如果数组长度为5,最后一个元素将在第4个索引处访问。在您的代码中
else if (y == array.length && x == array.length)
{
up = array[y - 1][x];//Exception here
down = array[y][x];
left = array[y][x - 1];
right = array[y][x];
}
change it to:
把它改成:
else if (y == array.length-1 && x == array.length-1)
{
up = array[y - 1][x];
down = array[y][x];
left = array[y][x - 1];
right = array[y][x];
}
follow the same approach in other else if's.
如果是的话,请遵循同样的方法。
#2
1
When you call the method with y = 4 and enter
当你用y = 4调用这个方法并输入
// if element is on left
else if (x == 0) {
up = array[y - 1][x];
down = array[y + 1][x];
left = array[y][x];
right = array[y][x + 1];
}
then you're actually left and on the bottom line. So you can't go "down". This causes the exception in this case. You could change it to
那么你就在底线上了。所以你不能往下走。在这种情况下,这会导致异常。你可以把它改成
// if element is on left and not on bottom line
else if (y < array.length && x == 0) {
#1
4
array indexes start from 0, if your array is of length 5, the last elemnt will be accessed at 4th index. in your code
数组索引从0开始,如果数组长度为5,最后一个元素将在第4个索引处访问。在您的代码中
else if (y == array.length && x == array.length)
{
up = array[y - 1][x];//Exception here
down = array[y][x];
left = array[y][x - 1];
right = array[y][x];
}
change it to:
把它改成:
else if (y == array.length-1 && x == array.length-1)
{
up = array[y - 1][x];
down = array[y][x];
left = array[y][x - 1];
right = array[y][x];
}
follow the same approach in other else if's.
如果是的话,请遵循同样的方法。
#2
1
When you call the method with y = 4 and enter
当你用y = 4调用这个方法并输入
// if element is on left
else if (x == 0) {
up = array[y - 1][x];
down = array[y + 1][x];
left = array[y][x];
right = array[y][x + 1];
}
then you're actually left and on the bottom line. So you can't go "down". This causes the exception in this case. You could change it to
那么你就在底线上了。所以你不能往下走。在这种情况下,这会导致异常。你可以把它改成
// if element is on left and not on bottom line
else if (y < array.length && x == 0) {