【发布时间】:2019-07-16 00:29:02
【问题描述】:
在最后一行代码的主要方法中,我有一个目录可以从我的桌面运行 maze.txt 来运行迷宫。我该如何解决这个问题,因为如果我将此代码发送给其他人,他们必须打开文件并将目录更改为他们与我的文件一起下载的 maze.txt 的目录。**
迷宫.txt
7 7
咕咕咕
XXOXOOX
OXOOOOXX
XXXOOXO
XXXXOXX
太棒了
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]);
String readline;
int num = 0;
char [][] maze = new char[row][col];
while((readline = read.readLine()) != null){
char[] ch = readline.toCharArray();
for(int i = 0;i < ch.length;i++){
maze[i][num] = ch[i];
}
num++;
}
return maze;
}
private static int startX(char[][] charArray){
int startX = 0;
for(int i=0 ; i < charArray.length ; i++){
for(int j=0 ; j < charArray[i].length ; j++){
if(charArray[i][j] == 'S'){
startX = i;
}
}
}
return startX;
}
private static int startY(char[][] charArray){
int startY = 0;
for(int i=0 ; i < charArray.length ; i++){
for(int j=0 ; j < charArray[i].length ; j++){
if(charArray[i][j] == 'S'){
startY = j;
}
}
}
return startY;
}
public static void main(String[] args) throws IOException {
MazeSolver ms = new MazeSolver("C:\\Users\\mypc\\Desktop\\maze.txt");
}
}
【问题讨论】:
-
您可以将路径设为运行时参数,并从 main 方法的
args获取 if(如此处:stackoverflow.com/a/22847894/2516301)。阅读 java 中的命令行参数 -
你能解释更多吗?
-
使用相对路径,“./maze.txt”
-
您是否总是希望运行同一个 txt 文件,或者用户可以提供他/她自己的文件?我之前的评论是针对后一种情况的。如果是前一种情况,你可以参考 Kai Aeberli 的建议。
-
我会使用像grade或maven这样的打包工具。 maze.txt 将是项目的资源并打包在 jar 文件中。可以更新 java 程序以在 jar 文件之外查找特定路径以加载用户本地的迷宫文件。我会删除 startX() 和 startY() 方法上的静态,只有 main() 应该是静态的