2013-10-20 50 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',並確保您檢查該信的所有方向。