2014-07-14 3 views
0

Boggle과 같은 게임을위한 프로그램을 작성해야하며, 현재 현재 단어 아래에있는 각 문자를 확인하여 단어를 만들지 확인합니다. 그래서 이런 보드를 위해서 :데이터를 2D 배열로 다시 삽입하는 문제

W O Y R 
F U M F 
H T R V 
I G S W 

단어는 위에서 아래로가는 "OUT"입니다. 단어의 일부를 찾으면 그 문자를 문자열에 넣고 null로 설정하여 같은 단어에 두 번 사용하지 않습니다 (전체 알고리즘은 여러 방향으로 검색 할 수 있어야합니다). 나는 스택을 사용하여 내가 사용했던 글자의 좌표를 추적 할 수있다. 그래서 나는 스택을 팝 할 때마다 문자열의 마지막 글자를 가져 와서 보드의 원래 위치로 되돌려 놓는다. 그러나 문제는 여러 글자를 제거하면 이전 글을 덮어 쓰면서 같은 글자에 모두 넣는다는 것입니다. 나는 내 코드를 통과하고 두 번 다시 작성하려고했습니다

W null Y R 
F null M F 
H O R V 
I G S W 

하지만 항상이 작업을 수행 : "OUT"의 경우 그래서 보드는 세 글자를 교체 한 후 다음과 같이 찾고 끝납니다. 왜 이런 일이 일어나고 있는지에 대해 통찰력을 갖고 있습니까?

private void checkNeighbors(LetterCoor center){ 
    String check = out; 
    while (!path.empty()){ 
     if(center.getDirec()==0){//If the direction to check is down 
      System.out.println("Bottom"); 
      if((center.getRow())+1<sideLength && board[(center.getRow())+1][center.getCol()]!=null){//makes sure the space below is !null and !out of bounds 
       check+=board[center.getRow()+1][center.getCol()]; 
       System.out.println("Checking " + check); 
       if(isValidWord(check)){//checks if string is part of the lexicon 
        center.nextNeighbor(); 
        board[center.getRow()+1][center.getCol()]=null; 
        center = new LetterCoor(center.getRow()+1, center.getCol(), 0); 
        System.out.println("push " + check.substring(check.length()-1)); 
        path.push(center); 
        out=check; 

       } 
       else{ 
        center=(LetterCoor) path.pop(); 
        center.nextNeighbor(); 
        path.push(center); 
       } 
      }//end of null if 
      else{ 
       System.out.println("Null or end of board"); 
       center=(LetterCoor) path.pop(); 
       center.nextNeighbor(); 
       path.push(center); 
      } 
     }//end of direc 0 if 
     else{ 
      System.out.println("pop " + out.substring(out.length()-1,out.length())); 
      center=(LetterCoor) path.pop(); 
      center.nextNeighbor(); 
      board[center.getRow()][center.getCol()]=out.substring(out.length()-1,out.length()); 
      out=out.substring(0,out.length()-1); 
      if (center.getDirec()<1){ 
       path.push(center); 
      } 
     } 
     System.out.println("Current string is " + out); 
    }//end of while loop 
} 

내 코드에 대한 설명이 필요하면 알려주십시오.

또한 LeterCoor 객체는 3 개의 int를 저장합니다. 첫 번째는 문자의 행 색인이고 두 번째는 열 색인이며 세 번째는 검색중인 방향을 나타냅니다 (0 = 아래, 1 = 오른쪽 아래, 2 = 오른쪽 등)

+0

게시물을 읽기 쉽게 만들 수 있습니까? u가 오류가 발생하면 plz 게시 plz –

+0

@KickButtowski 내가 할 수있는 가장 큰 것은이 코드가 어떻게 실행되는지를 명확하게하거나 설명하기위한 몇 가지 설명에 담겨 있습니다. 실제 오류는 생성되지 않고 단지 부적절한 결과를 제공합니다. – CheeseCoder

+0

논리적 오류 –

답변

0

솔루션 전반에 걸쳐 문제는 내 LetterCoor 개체 때문이었습니다. 이클립스는 개체 클래스를 별도의 파일에 가지고 있기 때문에 변수를 정적으로 설정해야하므로 한 LetterCoor 개체에서 좌표 데이터를 업데이트 할 때 모든 LetterCoor 개체의 데이터를 해당 좌표로 설정합니다. 객체 클래스를이 클래스와 동일한 파일로 이동하고 변수에서 정적 선언을 제거하여이 문제를 해결했습니다.