在这样一个大的集合中,你能根据它的“行-列”坐标找到一个字符吗?
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”还是“.”这一部分很简单,但它依赖于能够将每个字符标识为“行[行]、列[列]”。
二维数组不起作用,因为每个字符都需要同时位于行和列数组中。92x91 char块的当前方法(非常低效)是创建92个数组,每个数组包含91个字符,然后将92个数组放入char[]]。在执行for循环时,行将是char[]]中的index/char[],而在中使用另一个for循环时,列将是char[]中的索引。是可行的,但如果你能说出一个更好的方法或者指出一个更好的解决方案,那就太好了。谢谢您!
1条答案
按热度按时间efzxgjgh1#
第3.8.5小节中介绍了二维数组,但从那时起我们就没有对它们做太多的研究。2d数组的类型为int[][]或string[][],带有两对方括号。二维数组的元素按行和列排列,二维数组的新运算符同时指定行数和列数。例如,
这将创建一个int的2d数组,其中12个元素排列在3行4列中。虽然我没有提到,但是有用于2d数组的初始值设定项。例如,此语句创建3×4数组,如下图所示:
二维数组的数组初始值设定项包含由逗号分隔并用大括号括起来的数组行。每一行依次是一个由逗号分隔并用大括号括起来的值列表。还有一些具有类似语法的2d数组文本可以在任何地方使用,而不仅仅是在声明中。例如,
所有这些都可以自然地扩展到三维、四维甚至更高维的数组,但它们在实际中并不经常使用。
7.5.1关于2d阵列的真相,但在我们进一步讨论之前,有一点令人惊讶。java实际上没有二维数组。在真正的2d数组中,数组的所有元素都占用一个连续的内存块,但在java中不是这样的。数组类型的语法是一个线索:对于任何类型的basetype,我们应该能够形成类型basetype[],意思是“array of basetype.”如果我们使用int[]作为基类型,我们得到的类型是“int[][],意思是“array of int[]”或“array of array of int.”事实上,就是这样。int[][]类型的二维数组中的元素是int[]类型的变量。记住int[]类型的变量只能保存指向int数组的指针,因此,2d数组实际上是指针数组,每个指针都可以引用一维数组。这些一维数组是二维数组的行。一张图片将有助于解释这一点。考虑上面定义的3×4数组。逐字复制自http://math.hws.edu/javanotes/c7/s5.html#:~:text=a%202d%20array%20a有%20a,并且%20a有%20number%20of%20columns。
(未注明)。2020年12月29日检索自http://math.hws.edu/javanotes/c7/s5.html