2013-10-20 30 views
0

我在尝试编写此程序时遇到困难。我在网上发现了很多类似的问题和解决方案,但他们并不完全是我所期待的。在Java中水平,垂直和对角地(两个方向)搜索2D阵列

有一个文本文件,我的程序读取并转换为字符二维数组。

示例文本文件:

HFELOJF 
ESFOIGD 
LSDIOGS 
LTDMGER 
OEROFFT 
SFDLKEG 

然后我给它一个字,如“你好”,程序打印出天气或不存在这个词在数组中。有点像单词搜索。

我需要能够水平,垂直和对角搜索。但是这个词在所有3种情况下也可能倒退。

我已经开始使用2 for循环,从左上角开始并工作到最后。

在第二个for循环内我有3个while循环来处理:水平,垂直和对角线文本。但我只是意识到,如果这个词是相反的,它就行不通。现在为了解决这个问题,我必须构建3个其他while循环来处理我的代码。

我只是觉得这非常重复,认为必须有一个更简单的方法。但我一直在盯着这个问题几个小时,并没有提出一个更明智的想法。

如果我继续我所拥有的,我会在第二个for循环中有2个for循环和6个while循环,我发现它们非常混乱,重复和额外的代码。有没有更好,更快,更有效的方法来解决这个问题?

欣赏我所能得到的所有帮助和信息!

+0

如果你可以找到一个'''String',请将其反转并查看它是否有效。 – Justin

+0

是的,这将工作,但它需要我做另一个循环,并保持减去数组,看看它是否工作。我知道它的工作原理,但它使代码翻倍。我想看看是否有一种更简单的方法来处理这两种情况,前进和颠倒。 – ashimashi

+1

“我只是觉得这很重复,认为必须有一个更简单的方法”。有时候为了理解题材,家庭作业练习(我假设这就是这个)是一种艰苦而重复的练习。在这种情况下,主题是遍历2D数组。是的,这个问题很糟糕,但我相信你会在解决问题的路上找出很多方法 –

回答

2

如果你只是想检查反向

String reverse = new StringBuffer(string).reverse().toString(); 
+1

非常感谢!这实际上有所帮助。我之前做的是采取原来的字符串,并从中得到最后一封信,并以我的方式倒退,但让事情混乱到一个新的水平。我能够在你的帮助下真正简化代码。谢谢! – ashimashi

0

这里是我会怎么做。遍历每个字母。假设这封信是单词的开头或结尾。如果“hello”不是“h”或“o”,请跳过它。然后为每个字母检查对角线,水平和垂直方向。此外,如果你这整个相反的事情困扰你忽略它。只要搜索字母'h',并确保您检查该信的所有方向。