2016-10-18 10 views
1

私の割り当ては、Javaでスタックを使用して迷路を解決することです。私はいくつかのコードを持っていますが、私は同じエラーに走り続けています。何がうまくいかないのか分かりません。Javaでスタックを使用して迷路を解決する

これは私のコードです:

/** 
* @author Zackie Nisar 
*/ 
import java.io.*; 
import java.util.*; 
/** 
    * Reads a file called maze.txt. 
    * In the file, a maze composed of @ signs, $ signs, periods, and hashtag exists. 
    * The @ sign is the beginning of the maze, the hashtags are the walls, the $ sign the end, and the periods ways to navigate through the maze. 
    * This program finds a way to navigate through that maze. 
    * If the text file doesn't exist, the program will quit and exit. 
    * @param args an array of strings which contains command-line arguments in Java 
    */ 

public class MazeSolver 
{ 
    private static char maze[][];  
    private static Stack<Character> stack = new Stack<Character>(); 
     public static void main(String[] args) 
     { 
       File textFile = new File("/c:/Temp/maze.txt"); 
       String line; 
       int row = 0; 
       try 
       { 
        FileReader fileReader = new FileReader(textFile); 
        BufferedReader bufferedReader = new BufferedReader(fileReader); 
        maze = new char[Integer.parseInt(bufferedReader.readLine())][Integer.parseInt(bufferedReader.readLine())]; 
        while ((line = bufferedReader.readLine()) != null) 
        { 
         maze[row] = line.toCharArray(); 
         row++; 
        } 
        process(1,1); 
       } 
       catch (FileNotFoundException e) 
       { 
        System.err.println("FileNotFound: " + e.getMessage()); 
       } 
       catch (IOException e) 
       { 
        System.err.println("IOException: " + e.getMessage()); 
       } 
     } 
     public static void process(int row, int column) 
     { 
       displayArray(); 
       System.out.println(row + ", " + column); 
       System.out.println("size is: " + stack.size() + "\n"); 
       if (maze[row][column] == '$') 
       { 
        displayStack(row,column); 
       } 
       else 
       { 
        if (maze[row - 1][column] == '.' && (stack.isEmpty() || stack.peek() != 'd')) 
        { 
         stack.push('u'); 
         process(row - 1,column); 
        } 
        else if (maze[row + 1][column] == '.' && (stack.isEmpty() || stack.peek() != 'u')) 
        { 
         stack.push('d'); 
         process(row + 1,column); 
        } 
        else if (maze[row][column + 1] == '.' && (stack.isEmpty() || stack.peek() != 'l')) 
        { 
         stack.push('r'); 
         process(row,column+1); 
        } 
        else if (maze[row][column - 1] == '.' && (stack.isEmpty() || stack.peek() != 'r')) 
        { 
         stack.push('l'); 
         process(row,column - 1); 
        } 
        else 
        { 
         backtrack(row,column); 
        } 
       }     
     } 

     public static void displayStack(int row,int column) 
     { 
       if (!stack.isEmpty()) 
       { 
        System.out.print("(" + row + ", " + column + ") "); 
        char temp = stack.pop(); 
        if (temp == 'd') 
        { 
         displayStack(row + 1,column); 
        } 
        else if (temp == 'u') 
        { 
         displayStack(row - 1,column); 
        } 
        else if (temp == 'l') 
        { 
         displayStack(row,column + 1); 
        } 
        else 
        { 
         displayStack(row,column - 1); 
        } 
       }     
     } 

     public static void onlyOne(int row, int column, char pos) 
     { 
       boolean branch = false; 
       if (maze[row + 1][column] == ' ' && pos != 'u') 
       { 
         branch = true; 
       } 
       else if (maze[row - 1][column] == ' ' && pos != 'd') 
       { 
         branch = true; 
       } 
       else if (maze[row][column + 1] == ' ' && pos != 'l') 
       { 
         branch = true; 
       } 
       else if (maze[row][column - 1] == ' ' && pos != 'r') 
       { 
         branch = true; 
       } 
       else if (!branch) 
       { 
        // destroys backtracked location as there was only one exit 
        System.out.println("terminating : " + row + "," + column + " size of stack is: " + stack.size()); 
        maze[row][column] = '#'; 
       }     
     } 


     public static void backtrack(int row, int column) 
     { 
       if (!stack.isEmpty()) 
       { 
        char temp = stack.pop(); 
        onlyOne(row,column,temp); 
        if (temp == 'u') 
        { 
         process(row + 1,column); 
        } 
        else if (temp == 'd') 
        { 
         process(row - 1,column); 
        } 
        else if (temp == 'l') 
        { 
         process(row,column + 1); 
        } 
        else if (temp == 'r') 
        { 
         process(row,column - 1); 
        } 
       } 
       else 
       { 
        System.out.print("Maze has no solution."); 
       } 
     } 

     public static void displayArray() 
     { 
       for (int x = 0; x < maze.length; x++) 
       { 
         for (int y = 0; y < maze[x].length; y++) 
         { 
           System.out.print(maze[x][y]); 
         } 
         System.out.println(); 
       } 
       System.out.println(); 
     } 

} 





/* 
MY MAZE 
@ = START 
$ = END 
# = WALLS 
. = PATH 
# # # # # # # # # # # # 
# . . . # . . . . . . # 
@ . # . # . # # # # . # 
# # # . # . . . . # . # 
# . . . . # # # . # . $ 
# # # # . # . # . # . # 
# . . # . # . # . # . # 
# # . # . # . # . # . # 
# . . . . . . . . # . # 
# # # # # # . # # # . # 
# . . . . . . # . . . # 
# # # # # # # # # # # # 
*/ 

と私は同じエラーを取得しておいてください。

Exception in thread "main" java.lang.NumberFormatException: For input string: "# # # # # # # # # # # #" 
    at java.lang.NumberFormatException.forInputString(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at MazeSolver.main(MazeSolver.java:28) 

いくつかの助けと指導をいただければ幸いです。

+0

エラーは明確で、 '28'行で' number'に変換できない 'String'を変換しようとしています。だからあなたのテキストファイルの最初の行にチェックがあります。これは、 - > maze = new char [Integer.parseInt(buffereredReader.readLine())] [Integer.parseInt(bufferedReader.readLine())]を使用してIntegerに変換されます。 – GOXR3PLUS

+0

小切手でどういう意味ですか? –

+0

私は、 'Maze.txt'ファイルの中に2行目の最初の行が含まれているかどうかを調べることを意味します。 – GOXR3PLUS

答えて

1

文字列"# # # # # # # # # # # #"を入力して、intの値を解析しようとしました。 Integer.parseIntは、文字列を解析し、数値 - 整数を含むことができます。これは、ASCIIの数値で他の記号を変換することはできません。

関連する問題