在这样的大集合中,可以根据字符的"行-列";坐标?
LLLLLLL.L.LL.L.LLLL.LLLLLLL.LLLLL.LLLLLL.LLLLLLL.L.LLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLL
LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLL..LLLLLLLLLL.LLLLLLLLL.LLLL.LLLLL
LLLLLLLLL.LLLLLLLLLLLLLLLLL**.**LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL..LL.L.LLLLLLLLLLLLLLLLLLL.LLLL.
目标是解决代码降临节第11天,如果你知道它或它有助于你理解这个问题。这是解决涉及行-列坐标的难题的方法:假设每行有91个字符(索引0-90(,并且这里有三行(0,1,2(,那么"在星号内标识为第2行、第27列(或任何组合(。目标是对照左、右、上、下四个字符来检查每个字符。也许有更好的方法,但使用这个问题所涉及的方法,人们可以检查:
/*&"行[2]列[27]反对:
rows[1]columns[27] above
rows[3]columns[27] below, not shown, because the input is very long),
rows[2]columns[26] left
rows[2]columns[28 right
*/
看看它们是否是";L";或一个"这一部分很简单,但它依赖于能够将每个字符识别为";行[行]、列[列">
2D数组不起作用,因为每个字符都需要同时位于行和列数组中。92x91 char块的当前方法(效率非常低(是创建92个数组,每个数组包含91个字符,然后将92个数组放在char[][]中。当执行for循环时,行将是char[][]中的索引/char[],在其中使用另一个for循环,列将是char[]中的索引。可行,但如果你能说出一个更好的方法,或者指出一个更好解决方案的解释,那就太好了。非常感谢。
在第3.8.5小节中引入了二维阵列,但从那时起我们就没有对它们做太多工作。2D数组的类型为int[][]或String[][],带有两对方括号。2D阵列的元素按行和列排列,2D阵列的新操作符指定行数和列数。例如,
int[][] A;
A = new int[3][4];
这将创建一个int的2D数组,该数组具有排列在3行4列中的12个元素。虽然我没有提到它,但有一些用于2D数组的初始化程序。例如,此语句创建了下图所示的3乘4阵列:
int[][] A = { { 1, 0, 12, -1 },
{ 7, -3, 2, 5 },
{ -5, -2, 2, -9 }
};
2D数组的数组初始值设定项包含a的行,用逗号分隔并用大括号括起来。每一行都是一个值列表,用逗号分隔,并用大括号括起来。还有具有类似语法的2D数组文字可以在任何地方使用,而不仅仅是在声明中。例如,
A = new int[][] { { 1, 0, 12, -1 },
{ 7, -3, 2, 5 },
{ -5, -2, 2, -9 }
};
所有这些都自然地扩展到三维、四维甚至更高维的阵列,但它们在实践中并不经常使用。
7.5.1 2D阵列的真相但在我们走得更远之前,有一个小惊喜。Java实际上并没有二维数组。在一个真正的2D数组中,数组的所有元素都占用一个连续的内存块,但在Java中不是这样。数组类型的语法是一条线索:对于任何类型BaseType,我们都应该能够形成类型BaseType[],意思是";BaseType的数组"如果我们使用int[]作为基类型,那么我们得到的类型是";int[][]的意思是";int[]的数组";或";int的数组的数组";事实上,事情就是这样。类型为int[][]的2D数组中的元素是类型为int[]的变量。请记住,类型为int[]的变量只能容纳指向int数组的指针。因此,2D数组实际上是指针数组,其中每个指针都可以引用一维数组。那些一维阵列是2D阵列的行。图片将有助于解释这一点。考虑上面定义的3乘4阵列A。逐字复制自http://math.hws.edu/javanotes/c7/s5.html#:~:text=A%202D%20array%20has%20a,%20the%20number%20of%20columns。
(未注明日期(。2020年12月29日检索自http://math.hws.edu/javanotes/c7/s5.html