2016-01-26 4 views
-2

Я хочу найти слова в Word Puzzle на Java. Поиск, как указано в горизонтальном, вертикальном и диагональном. Я создал массив, но я просто не знаю, как создать String и искать слова в моей строке. Мне нужно знать, как у меня есть String, который хранит все значения таблицы, и как я могу набирать слово и искать его здесь.Поиск слов в многомерном массиве, Java

Я знаю, что поиск слов выполняется с помощью функции indexOf, но я не знаю, как это выполнить. импорт java.util.Scanner;

public class main { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     int IntegerPosition; 
     int IntegerPosition2; 
     String position=""; 
     String word=""; 
     Scanner s = new Scanner(System.in); 
     String content=""; 
     String[][] sopa = { 
       {"X","F","E","K","J","U","I","R","S","H"}, 
       {"Z","H","S","W","E","R","T","G","O","T"}, 
       {"B","R","A","B","F","B","P","M","V","U"}, 
       {"D","W","E","R","O","O","J","L","L","W"}, 
       {"U","T","O","N","I","R","O","B","C","R"}, 
       {"O","P","R","O","V","I","I","K","V","B"}, 
       {"N","I","Q","U","E","N","T","N","S","A"}, 
       {"O","V","U","L","R","O","S","S","O","T"}, 
       {"A","S","A","X","J","T","R","R","I","T"}, 
       {"R","K","M","E","P","U","B","O","T","A"} 
     }; 
     for (int i = 0; i < sopa[0].length; i++){ 
      for(int j = 0; j < sopa[i].length; j++){ 
       content += sopa[i][j]; 
      } 
      System.out.println(content); 
      content = ""; 
     } 
     System.out.println("Type the word you are looking for"); 
     word = s.next(); 

     for (int i = 0; i < sopa[0].length-1; i++){//t1.length 
      for(int j = 0; j < sopa[i].length-1; j++){ 


      } 
     } 
     System.out.println(content); 
     content = ""; 
    } 

} 
+0

Показать все попытки решить это самостоятельно, и мы постараемся направлять их в правильном направлении. – Idos

+0

Очень хорошая ссылка: http://stackoverflow.com/questions/4795383/how-to-traverse-though-a-2d-char-array-searching-for-words-in-java – user2004685

ответ

0

Во-первых, вы должны заявить, что означает «найти слово». Я думаю, вы хотите найти последовательность букв в каждой строке и столбце. Как насчет диагонали? Backwards? Обертывание вокруг?

Два решения приходят на ум:

  1. Использование индекса Строки:
    • Построить строку из всех символов. Это необходимо сделать для каждого направления (горизонтальное, вертикальное, диагональное), но только в прямом порядке, если вы отмените поисковый запрос для обратного поиска. Для эффективной реализации StringBuilder - ваш друг.
    • Используйте String.indexOf, чтобы найти вхождение в термин в вашем индексе. Наконец, вам нужно вычислить строку и столбец из позиции String, и, если обертка не разрешена, проверьте, пересекает ли слово границу любой строки/столбца.
    • Я бы использовал это, если бы мне пришлось искать много терминов.
  2. Используйте массив
    • Кроме того, для каждого направления (по горизонтали, по вертикали, по диагонали)
    • Посмотрите на вхождения первой буквы поискового термина в массиве (простой итерация). Обратите внимание, что вы можете остановиться, когда термин не будет соответствовать строке/столбцу, поэтому для 6-буквенного слова вы можете пропустить 5 последних строк/столбцов.
    • Если вы нашли якорь (то есть соответствующую букву), проверьте последующие буквы этого слова. Отмена на несоответствие, в противном случае вы обнаружили возникновение.

Для более сложной реализации согласования, то Boyer-Moore algorithm может представлять интерес.