块中字符的“行列坐标”

问题描述

可以根据“行-列”坐标在这样的大集合中找到一个字符吗?

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.

目标是解决 Advent of Code Day 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”还是“.”这部分很简单,但它依赖于能够将每个字符识别为“行[行],列[列”。

二维数组不起作用,因为每个字符都需要在行数组和列数组中。 92x91 字符块的当前方法(非常低效)是创建 92 个数组,每个数组包含 91 个字符,然后将 92 个数组放入 char[][]。当通过 for 循环时,行将是 char[][] 中的索引/char[],并且在其中使用另一个 for 循环,列将是 char[] 中的索引。可行,但如果您说出更好的方法或指出某个地方解释了更好的解决方案,那就太好了。谢谢!

解决方法

二维数组在第 3.8.5 小节中介绍过,但从那时起我们就没有对它们做太多事情。二维数组具有诸如 int[][] 或 String[][] 之类的类型,带有两对方括号。二维数组的元素按行和列排列,二维数组的新运算符指定行数和列数。例如,

int[][] A;
A = new int[3][4];

这将创建一个 2D 数组 int,其中 12 个元素排列在 3 行 4 列中。虽然我没有提到它,但有 2D 数组的初始值设定项。例如,此语句创建如下图所示的 3×4 数组:

int[][]  A  =  {  {  1,12,-1 },{  7,-3,2,5 },{ -5,-2,-9 }
               };

二维数组的数组初始值设定项包含 A 的行,用逗号分隔并用大括号括起来。反过来,每一行都是一个由逗号分隔并括在大括号之间的值列表。还有具有类似语法的二维数组文字,可以在任何地方使用,而不仅仅是在声明中。例如,

A  =  new int[][] {  {  1,-9 }
                  };

所有这些自然而然地扩展到 3 维、4 维甚至更高维的数组,但它们在实践中并不经常使用。

7.5.1 二维数组的真相 但在我们走得更远之前,有一个小小的惊喜。 Java 实际上没有二维数组。在真正的二维数组中,数组的所有元素都占用一个连续的内存块,但在 Java 中则不然。数组类型的语法是一个线索:对于任何 BaseType 类型,我们应该能够形成 BaseType[] 类型,意思是“BaseType 数组”。如果我们使用 int[] 作为基本类型,我们得到的类型是“int[][] 意思是“int[] 数组”或“int 数组的数组”。事实上,这就是发生的事情。元素在 int[][] 类型的二维数组中是 int[] 类型的变量。记住,int[] 类型的变量只能保存指向 int 数组的指针。因此,二维数组实际上是一个数组指针,其中每个指针可以指向一个一维数组。这些一维数组是二维数组的行。一张图片将有助于解释这一点。考虑上面定义的 3×4 数组 A。 从 http://math.hws.edu/javanotes/c7/s5.html#:~:text=A%202D%20array%20has%20a,and%20the%20number%20of%20columns 逐字复制。

(未注明日期)。 2020 年 12 月 29 日检索自 http://math.hws.edu/javanotes/c7/s5.html