在最后一行代码的主要方法中,我有一个目录可以从我的桌面运行 maze.txt

在最后一行代码的主要方法中,我有一个目录可以从我的桌面运行 maze.txt 来运行迷宫。我该如何解决这个问题,因为如果我将此代码发送给其他人,他们必须打开文件并将目录更改为他们与我的文件一起下载的 maze.txt 目录。**


迷宫.txt


7 7

GOOOOXO

XXOXOOX

OXOOOOXX

XXXOOXO

XXXXOXX

SOOOOOX

XXXXXXX


import java.io.*;


public class MazeSolver {



private char [][] maze;

private int startX , startY;

private int counter = 0;



public  MazeSolver(String fileName) throws IOException {


   maze = fileIterator(fileName);


   startX = startX(maze);

   startY = startY(maze);


   solve(startX,startY);


    System.out.println(printMaze());



}


public void solve(int x, int y) {

    if (findPath(x,y)) {

        maze[x][y] = 'S';

    }

}


public boolean findPath(int x , int y){


    counter ++;


    if (maze[x][y] > 7) {return false;}


    if (maze[x][y] == 'G') {return true;}


    if (maze[x][y] == 'X' || maze[x][y] == 'O'){return false;}


    maze[x][y] ='O';


    boolean result;


    result = findPath(x , y+1);

    if(result){return true;}


    result = findPath(x-1 , y);

    if(result){return true;}


    result = findPath(x , y-1);

    if(result){return true;}


    result = findPath(x+1 , y);

    if(result){return true;}


    maze[x][y] = 'O';


    return false;



}


public String printMaze() {

    String output = "";

    for (int x = 0; x < 7; x++) {

        for (int y = 0; y < 7; y++) {

            output += maze[x][y] + " ";

        }

        output += "\n";

    }

    return output;

}



private char[][] fileIterator(String fileName) throws IOException {


    File file = new File(fileName);


    if(!file.exists()){

        System.out.println(fileName+ "does not exists");


    }


    if(!(file.canRead() && file.isFile())){

        System.out.println(fileName + "can not be read");


    }


    BufferedReader read = new BufferedReader(new FileReader(file));

    String rea = read.readLine();

    String[] split = rea.split(" ");

    int row =  Integer.valueOf(split[0]);

    int col = Integer.valueOf(split[1]);



九州编程
浏览 83回答 2
2回答

aluckdog

有很多解决方案,具体取决于您的需要。一个简单的方法是,如果您希望用户尝试他们可以提供的不同 maze.txt 文件,则从命令行参数(即,从argsmain 方法的参数)获取文件的路径。您可以将主要方法主体更改为:MazeSolver ms = new MazeSolver(args[0]);当然,还需要进一步检查,但这与本练习无关。然后,用户从终端运行您的程序:java MazeSolver /path/to/their/maze.txt/path/to/their/maze.txt将args[0]在您的主要方法中捕获。

神不在的星期二

import java.util.Scanner;import java.io.*;public class MazeSolver {&nbsp; &nbsp;private char[][] maze;&nbsp; &nbsp;private int startX;&nbsp; &nbsp;private int startY;&nbsp; &nbsp;private int row;&nbsp; &nbsp;private int col;&nbsp; &nbsp;private int endX;&nbsp; &nbsp;private int endY;&nbsp; &nbsp;public MazeSolver (String fileName) {&nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Scanner get = new Scanner(new FileReader(fileName));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;row = get.nextInt(); // Integer.parseInt(sChar[0]);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;col = get.nextInt(); //col = Integer.parseInt(sChar[2]);&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;maze = new char[row][col];&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;String mazeString = "";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Read the entire file and store in a String called mazeString&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while(get.hasNextLine()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mazeString += get.nextLine();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;char[] temp = mazeString.toCharArray();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for(int x = 0; x < row * col; x++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; maze[x/row][x%col] = temp[x];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; catch (IOException e) {&nbsp; &nbsp; &nbsp; &nbsp;System.out.println("\nFile cannot be found. Please try again: \n");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.exit(0);&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; char start = 'S';&nbsp; &nbsp; &nbsp; for(int i = 0; i < row; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for(int x = 0; x < col; x++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; char setStart = maze[i][x];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(setStart == start) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;startX = i;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;startY = x;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; char goal = 'G';&nbsp; &nbsp; &nbsp; for(int i = 0; i < row; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for(int x = 0; x < col; x++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; char setEnd = maze[i][x];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(setEnd == goal) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;endX = i;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;endY = x;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; if (solveMaze(startX,startY)){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println("Solution Found");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printMaze();&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; else{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println("No solution Found");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printMaze();&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp;}&nbsp; &nbsp;public void printMaze() {&nbsp; &nbsp; &nbsp; &nbsp; for(int r = 0; r < row; r++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(int c = 0; c < col; c++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.print(maze[r][c]);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println();&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp;public boolean solveMaze(int x, int y) {&nbsp; &nbsp; &nbsp; &nbsp;// Base case&nbsp; &nbsp; &nbsp; if(x == endX && y == endY) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;maze[x][y] = 'G';&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;maze[startX][startY]='S';&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return true;&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp;// Out of bounds&nbsp; &nbsp; &nbsp; if((x >= 0 && x < row && y >= 0 && y < col && maze[x][y] != 'X' && maze[x][y] != '.') == true) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;maze[x][y] = '.';&nbsp; &nbsp; &nbsp; &nbsp;// Right&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(solveMaze(x + 1, y)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp;// Left&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(solveMaze(x - 1, y)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp;// Up&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(solveMaze(x, y - 1)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp;// Down&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(solveMaze(x, y + 1)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; maze[x][y] = '#';&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return false;&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java