2012-04-18 1 views
1

저는 프로그래밍에 약간 익숙하고 재귀 적 메소드를 수행하는 데 도움이 필요합니다 .2 차원 배열에서 임의의 공간을 선택하고 공간이 비어 있는지 확인하려고하는 메소드가 있습니다. 공간이없는 경우 그 공간을 사용하고 싶지만, 그렇지 않은 경우 당신이 코멘트에 언급 된 특정 문제가 firstSpace 때문이다 2D array.Thanks은 Java에서 재귀 적 방법에 대한 도움이 필요합니다.

import java.io.* ; 
import java.util.ArrayList ; 
public class WordSearchPuzzle 
{ 
    private char[][] puzzle ; 
    private ArrayList<String> puzzleWords ; 
    private int letterCount = 0 ; 
    private int gridDimensions; 

    public WordSearchPuzzle(ArrayList<String> userSpecifiedWords) 
    { 
     this.puzzleWords = userSpecifiedWords ; 

    } 

    private void createPuzzleGrid() 
    { 
     int i, itemLength; 
     String item; 
     for (i = 0; i < puzzleWords.size(); i++) { 
      item = puzzleWords.get(i); 
      itemLength = item.length(); 
      letterCount = letterCount + itemLength; 
     } 
     gridDimensions = letterCount * 2; 
     puzzle = new char[gridDimensions][gridDimensions] ; 
    } 

    private void generateWordSearchPuzzle() 
    { 

    } 


    public void firstSpace(String Word) 
     { 
      int row, column; 
      row = (int)(Math.random() * gridDimensions +1); 
      column = (int)(Math.random() * gridDimensions +1); 
      if(puzzle[row][column] != ' '){ 
       firstSpace(); 
      } 
     } 
+0

무엇이 문제입니까? – Jim

+0

재귀가 좋은 또는 거의 괜찮은 솔루션 인 경우 문제가되지 않습니다. 잠깐 동안 무작위 공간을 선택하고 자유로운 지 확인하십시오. – Mads

+0

무엇이 문제이고 퇴거 조건은 무엇입니까? 너 경계를 정의 했니? – Phani

답변

0

귀하의 색인 계산에 1을 추가하는 것이 필요하지 않으며 배열이 경계를 벗어나는 예외를 유발할 수 있다고 생각합니다. 그래도 gridDimensions 정의에 따라 다릅니다.

자바 컴파일러가 'void firstSpace()'라는 메서드를 찾으려고했기 때문에 주석에 지정된 문제는 'void firstSpace (String word)'와 다른 메서드입니다.

public void firstSpace(String word) 
{ 
    int row, column; 

    // No need to add 1, Java arrays are accessed with the first index 
    // being 0. Math.random() returns from 0 up to but not including 1.0. 
    // e.g. array size = 50, min index = 0, max index = 49 
    // Lets say you get very close to 1 e.g. 0.9999, then 
    // 0.9999 * 50 = 49.995 (after integer truncating you have 49) 
    row = (int)(Math.random() * gridDimensions); 
    column = (int)(Math.random() * gridDimensions); 

    if(puzzle[row][column] != ' ') { 
     // If this element is not "empty" then run the method again 
     // using recursion. null might be a better choice to compare 
     // to depending on how you initialized the array. 
     firstSpace(word); 
    } else { 
     // Otherwise we're finished and we can set the array element 
     // to the new word. 

     // (Assumed post condition (you might want to do something else once you 
     // find a blank index)) 
     puzzle[row][column] = word; 
    } 
} 
+0

Simon에게 도움을 주신 데 감사드립니다. 지금까지 전체 코드를 표시하도록 코드를 편집합니다. – user1323808

+0

행 및 열 계산에 +1을 추가 할 필요가 없습니다. 나는 코드를 편집하고 코멘트에서 왜 이해할 수 있는지 설명했다. 게시 한 새 코드가 예상 한 것과 많이 다릅니다. 나는 그것이 'n x n'문자열 배열이라고 생각했다. 'n x n'char 배열을 본질적으로 'n x 1'문자열 배열로 갖는다. –

+0

도움을 주신 것에 감사드립니다. 마지막 질문 하나만 남았습니다. 재귀 부분에서 공간이 명확하지 않을 때 새로운 단어를 입력하라는 메시지가 표시됩니다. 코드의이 부분을 else 부분 퍼즐에 넣는 이유가 확실하지 않습니다. [행] [열] = 단어; 그들은 호환되지 않는 유형이기 때문에 – user1323808

2

에 새로운 임의의 공간을 선택하려면 메서드는 문자열을 매개 변수로 가질 필요가 있습니다. 다음을 사용해야합니다.

firstSpace(word); 

또한이 방법은 현재 어떤 결과가 반환되지 않으므로 선택한 공간을 알 수 없습니다.

+0

Jim에게 감사드립니다. 2 가지 질문이 있습니다. 1) 재귀 함수로 갈 때마다 새 단어를 입력하라는 메시지가 표시됩니다. 2) else {return row && column; – user1323808

+0

@ user1323808 아니요, 첫 번째 재귀 함수 호출에 전달 된 것과 동일한 단어가 사용됩니다. 두 항목을 반환하려면 그 항목을 포함하는 개체를 만들어야하지만 맞으면 else에서 반환 할 수 있습니다 (첫 번째 부분에서는 return firstSpace (단어) 사용). – Jim

관련 문제