我有这个2D数组:
int[][] neighbours = { { 0, -1, -1, -1, 0, 1, 1, 1 }, // row
{ 1, 1, 0, -1, -1, -1, 0, 1 } }; // col
我想知道是否可以将此值中的值用作常规int变量,因此我可以使用例如neighbours[6][6]
来生成2个int变量,一个用于行,一个用于列,row = 1,列= -1。
任何想法?
答案 0 :(得分:1)
int row = neighbours[0][6]
int column = neighbours[1][6]
答案 1 :(得分:1)
你误解了2D数组的概念。
您的数组没有位置[6][6]
。您已定义2行8列。第一个索引表示您访问的行,第二个索引表示哪个列。
neighbours[6][6]
表示第7列中的第7个元素(数组中的第一个元素由索引0表示),它不存在。我认为您要访问的元素实际存储在neighbours[0][6]
和neighbours[1][6]
中。
请注意,neighbours[x][y]
仅代表一个元素,您使用两个变量指示其位置(这就是您将其称为二维数组的原因)。
除此之外,您可以将存储在该数组中的任何值分配给int变量。
int anInt = neighbours[0][0] //In you case, that's 0
int anotherInt = neighbours[0][1] //And this one is -1
答案 2 :(得分:0)
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
int[][] values = { {1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25} };
拥有一个二维数组就像拥有一个数组数组一样,所以在我的例子中,每个“row”都是一个int数组,你可以通过获取每一行的第n个元素来对列进行分组。这是抓住不同数字的结果。
values[0][0] = 1
values[0][1] = 2
values[1][0] = 6
values[1][4] = 10
values[3][2] = 18
现在,假设你想得到8号码的所有邻居。首先,你需要知道8号位置是什么:
values[1][2];
int y = 1;
int x = 2;
接下来,从x中加减;然后从y中加减,得到附近的值。我将在此示例中包含对角线。
int[] neighbors = new int[8];//We know there will be 8 neighbors in a square
int neighborCount = 0;
for (int j = y-1; j <= y+1; j++)
{
for (int i = x-1; i <= x+1; i++) // We start at the number 2(position [0][1]), increment through 3, and 4, then go to next row and start at 2 again.
{
if (! (j == y && i == x)) //Don't want to include 8 itself.
{
neighbors[neighborCount] = values[i][j];
neighborCount++;
}
}
}
此代码还需要考虑超出数组范围。例如:没有值[-1] [ - 1]。这就是我所有的时间,但希望这会有所帮助。