2013-09-20 2 views
0

Я пытался выяснить, как создать головоломку в Java самостоятельно, но застрял. Я смог прочитать во входном файле из файла, где размеры кроссворда хранятся в массиве. У меня проблема с поиском слова внутри настоящей головоломки. Это то, что я до сих пор:Я пытаюсь создать решатель кроссвордов в java

package crossWrdNMaze2; 

import java.io.File; 
import java.util.Scanner; 

public class crossWord { 



public static void main(String[] args) throws Exception { 
     Scanner sc = new Scanner(new File("puzzle.txt")); 
     //r and c describe the dimensions of the puzzle array 
     int r = sc.nextInt(); 
     int c = sc.nextInt(); 
     char[][] array = new char[r][c]; 
     //to scan puzzle chars into two-dimensional array 
     for (int i = 0; i<r; i++){ 
      String getChar = new String(sc.next()); 
      for(int j=0; j<c; j++){ 
       array[i][j] = getChar.charAt(j); 
      }//end for2 
     }//end for1 
     //Test to make sure array was filled 
     for(int i=0; i<r; i++){ 
      for(int j=0;j<r;j++) 
       System.out.print(array[i][j]); 
     System.out.println(""); 
     }//end for 

     //scan in the number of words to be found in array (these integers follow the lines of 
     //letters which make up the array in the text file 
     int num = sc.nextInt(); 
     System.out.println(num); 

     for(int i=0; i<num; i++){ 
      //scan in the first word to be found 
      String getWord = new String(sc.next()); 
      //determine word length to find size of array to look for in puzzle 
      int z = getWord.length(); 
      char array2[] = new char[z]; 
      //scan new string (word we are looking for) into an array so we can look for one letter 
      //at time in puzzle 
      for(int j=0; j<z;j++){ 
       array2[j] = getWord.charAt(j); 
      }//end for2 
      //Size two array for the purpose of passing by reference so we can get coordinates of 
      //word in puzzle 
      int[] result = new int[1]; 
      //pass array(puzzle), array2(word we are looking for), result(coordinates of word in array), 
      //r(number of rows in puzzle), c (number of columns in puzzle), z (length of word we 
      //are searching for) 
      findWord(array, array2, result, r, c, z); 
      //print loaction of word each time through loop 
      System.out.println(getWord + " is located at position (" + result[0] + ") (" + result[1] + ")"); 
     }//end for1 

     sc.close(); 
    }//end main 

static void findWord(char arr1[][], char arr2[], int[] result, int a, int b, int c){ 
     for(int i=0; i<a;i++){ 
      for(int j=0; i<b;j++){ 
       for(int k = 0; k<c;k++){ 
        if(arr1[i][j] != arr2[k]){ 
         System.out.println("Word not found!");//test to see if comparing letters and giving false return 
        }else if(arr1[i][j]== arr2[k]){ 
        System.out.println("progress");//test to check if returning true when correct 

       }//end if 
      }//end for3 
     }//end fosr2 
    }//end for1 
}//end function 
}//end class 

EDIT: Я добавил некоторые комментарии к коду, и я просто запоминаются из статьи, которую я недавно прочитал С Днем Рождения переполнения стека, я долгое время читатель но это первый раз, когда я когда-либо писал. Еще раз спасибо за ваше время

+5

wooo ... Редактировать ваше сообщение, этот комментарий не может быть прочитан! – Gianmarco

+1

Возможно, вы захотите скопировать свою функцию из комментариев к сообщению. Используйте 'edit'. –

+0

Нажмите [[edit]] вариант по вашему вопросу и обновите его с помощью дополнительной информации из комментария. После этого удалите свой комментарий. – Pshemo

ответ

0

Один из способов структурирования вашей проблемы состоит в том, чтобы извлечь строку, столбец и, в конечном итоге, диагональную полосу символов в строку (или массив символов) и выполнить свои тесты против этого.

for (int row=0; row<rows; row++) { 
    String strip=extractRow(row, arr); 
    if (strip.contains(word)) { ... } 
} 
for (int col=0; col<cols; col++) { 
    String strip=extractCol(col, arr); 
    if (strip.contains(word)) { ... } 
} 

Если вы просто сосредоточены на выведении последовательности символов, которые вы хотите сравнить ваше слово против, это сделает вашу проблему более управляемым.