我正在嘗試爲類作業創建一個簡單的單詞搜索,並且我設法弄清楚瞭如何搜索東(從左到右)和西(從右到左)。但是我在試圖找出如何向南搜索(從上到下)時遇到了困難。在java 2d數組中搜索字詞
我有一個文件讀取的代碼,但第二個文件返回一個ArrayIndexOutOfBoundsException。我的代碼中是否有特定的內容會使其不可擴展?
我校正代碼看起來是這樣的:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import wordSeek.GameBoard;
public class WordGame {
private char[][] letters;
GameBoard gb;
public static void main(String[] args) {
WordGame wg = new WordGame();
wg.play();
}
public WordGame() {
letters = readLettersFromFile();
gb = new GameBoard(letters);
}
private void play() {
Scanner s = new Scanner(System.in);
String word;
do {
System.out.println("Enter word to find: ");
word = s.next();
// reset all highlighted tiles
gb.reset();
search(word);
} while (!word.equals("QUIT"));
gb.dispose();
}
// Nothing to be done above
// Complete all the methods below
private char[][] readLettersFromFile() {
// From the data in the file Letters.txt determine the size (number of
// rows and number of columns) for the letters array
int rowCount = 0;
int colCount = 0;
char c;
File file = new File("resources/Places.txt");
Scanner fileScanner = null;
try {
fileScanner = new Scanner(file);
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
ArrayList<String> data = new ArrayList<String>();
while(fileScanner.hasNextLine())
{
String line = fileScanner.nextLine();
data.add(line);
}
fileScanner.close();
rowCount = data.size();
colCount = data.get(0).trim().length()/2+1;
// Instantiate a two dimensional array of characters of the appropriate
// size
letters = new char [rowCount][colCount];
// Populate the array with the letters in Letters.txt
for (int i = 0; i < rowCount; i++) {
String line = data.get(i);
int pos = 0;
for (int j = 0; j < colCount; j++) {
letters[i][j] = line.charAt(pos);
pos += 2;
}
}
// return the array
return letters;
}
private void search(String word) {
System.out.println("Searching for " + word);
//Call the other search methods below as needed
searchIterativeEast(word);
searchIterativeWest(word);
searchIterativeSouth(word);
searchIterativeNorth(word);
}
//The following four methods must employ ITERATION to search the game board
private boolean searchIterativeEast(String word) {
int k = 0;
for (int i = 0; i < letters.length; i++)
{
for (int j = 0; j < letters[i].length; j++) {
if (word.charAt(k) == letters[i][j]) {
k++;
}
else {
k = 0;
}
if (k == word.length()) {
for (int col = j - k + 1; col <= j; col++) {
gb.highlight(i, col);
}
return true;
}
}
}
return false;
}
private boolean searchIterativeWest(String word) {
String reversedWord = "";
for (int i = word.length() - 1; i != -1; i--)
{
reversedWord += word.charAt(i);
}
int k = 0;
for (int i = 0; i < letters.length; i++)
{
for (int j = 0; j < letters[i].length; j++) {
if (reversedWord.charAt(k) == letters[i][j]) {
k++;
}
else {
k = 0;
}
if (k == reversedWord.length()) {
for (int col = j - k + 1; col <= j; col++) {
gb.highlight(i, col);
}
return true;
}
}
}
return false;
}
private boolean searchIterativeSouth(String word) {
int k = 0;
int store = letters[0].length;
for (int j = 0; j < letters[store].length; j++)
{
for (int i = 0; i < letters.length; i++)
{
if (word.charAt(k) == letters[i][j])
{
k++;
}
else
{
k = 0;
}
if (k == word.length())
{
for(int row = i-k+1 ; row <= i; row++)
{
gb.highlight(row, j);
}
return true;
}
}
}
return false;
}
private boolean searchIterativeNorth(String word) {
String reversedWord = "";
for (int i = word.length() - 1; i != -1; i--)
{
reversedWord += word.charAt(i);
}
int k = 0;
int store = 0;
for(int i = 0; i < letters.length; i++)
{
store = letters[i].length;
}
for (int j = 0; j < letters[store].length; j++)
{
for (int i = 0; i < letters.length; i++)
{
if (reversedWord.charAt(k) == letters[i][j])
{
k++;
}
else
{
k = 0;
}
if (k == reversedWord.length())
{
for(int row = i-k+1 ; row <= i; row++)
{
gb.highlight(row, j);
}
return true;
}
}
}
return false;
}
爲所述第一文件(Animals.txt)的遊戲鍵盤看起來像:5X4 2D陣列
X C A T
P A L Q
I R B U
G P X N
G O D W
輸出亮點CARP。
的遊戲鍵盤的第二個文件(Places.txt)是這樣的:11×15二維數組
O M J G D A X V C S Q N K I F
D A X V T Q O M J H A A H F C
A Y W U R P N L F E I T A L Y
J N H N E T H E R L A N D S F
D B I Z X V T O A R Q O A Y K
M K I A H F K R N O D B N N I
N Z Y W P H T V C G C T A A N
R A Q O T S N L E K K I C M G
I H P U U F D C A Z D O X R D
X W O A L E U Z E N E V N E O
V S U S J R Q L I Z A R B G M
而不是
什麼是字母?它是一個n×n矩陣嗎?或者只是一個數組數組? – 2013-02-15 05:19:56
字母是一個字符[] [] – 2013-02-15 05:21:32
好的,這裏有一個提示。你的外循環應該遍歷列,並且內循環應該遍歷行。這只是與通常迭代數組數組相反的方式。所以,試着將字母[i] [j]'改成'字母[j] [i]'。我相信你會得到一個例外。您需要解決該異常。 – 2013-02-15 05:23:25