当前位置: 首页 > 知识库问答 >
问题:

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

燕琨
2023-03-14

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

迷宫文本

7.7 GOOOOXO
XXOXOOX
oxoox
xxxoxo
XXXXOXX
soooox
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");
}
}

共有2个答案

秋煌
2023-03-14
import java.util.Scanner;
import java.io.*;

public class MazeSolver {
   private char[][] maze;
   private int startX;
   private int startY;
   private int row;
   private int col;
   private int endX;
   private int endY;

   public MazeSolver (String fileName) {
      try {
         Scanner get = new Scanner(new FileReader(fileName));


         row = get.nextInt(); // Integer.parseInt(sChar[0]);
         col = get.nextInt(); //col = Integer.parseInt(sChar[2]);        
         maze = new char[row][col];      
         String mazeString = "";

         // Read the entire file and store in a String called mazeString
         while(get.hasNextLine()) {
            mazeString += get.nextLine();
         }

         char[] temp = mazeString.toCharArray();

         for(int x = 0; x < row * col; x++) {
            maze[x/row][x%col] = temp[x];
         }
      }

      catch (IOException e) {
       System.out.println("\nFile cannot be found. Please try again: \n");

         System.exit(0);
      }

      char start = 'S';
      for(int i = 0; i < row; i++) {
         for(int x = 0; x < col; x++) {
            char setStart = maze[i][x];
            if(setStart == start) {
               startX = i;
               startY = x;
            }
         }
      }

      char goal = 'G';
      for(int i = 0; i < row; i++) {
         for(int x = 0; x < col; x++) {
            char setEnd = maze[i][x];
            if(setEnd == goal) {
               endX = i;
               endY = x;
            }
         }
      }
      if (solveMaze(startX,startY)){
         System.out.println("Solution Found");
         printMaze();
      }
      else{
         System.out.println("No solution Found");
         printMaze();
      }

   }

   public void printMaze() {
        for(int r = 0; r < row; r++) {
                for(int c = 0; c < col; c++) {
            System.out.print(maze[r][c]);
         }
         System.out.println();

      }
        }

   public boolean solveMaze(int x, int y) {
       // Base case
      if(x == endX && y == endY) {
         maze[x][y] = 'G';
         maze[startX][startY]='S';
         return true;
      }

       // Out of bounds
      if((x >= 0 && x < row && y >= 0 && y < col && maze[x][y] != 'X' && maze[x][y] != '.') == true) {
         maze[x][y] = '.';

       // Right
         if(solveMaze(x + 1, y)) {
            return true;
         }

       // Left
         if(solveMaze(x - 1, y)) {
            return true;
         }

       // Up
         if(solveMaze(x, y - 1)) {
            return true;
         }

       // Down
         if(solveMaze(x, y + 1)) {
            return true;
         }
         else {
            maze[x][y] = '#'; 
            return false;
         }
      }
      else {
         return false;
      }
   }


}
伯建安
2023-03-14

根据您的需要,有很多解决方案。

一个简单的方法,如果你想让用户尝试不同的maze.txt文件,他们可以提供,是获得文件的路径从命令行参数(即,从args参数的main方法)...

您可以将主要方法主体更改为:

MazeSolver ms=新MazeSolver(args[0])

当然,还需要做进一步的检查,但这与本练习无关。

然后,用户从终端运行您的程序:

javamazesolver/path/to/this/maze。txt

/path/to/this/maze。txt将由主方法中的args[0]捕获。

 类似资料:
  • 我不知道发生了什么,代码就是不起作用。我已经在main上尝试了许多不同的形式,但是它一直在说main的非法方法...当我试图运行它时,它说该部分无法启动。

  • 我有一个大型java应用程序,在不同的类中有5个主要方法。我想将此应用程序作为docker容器运行。从DockerHub OpenJDK映像中,我启动了Dockerfile,如下所示 我想添加行来运行主要方法。没有Docker,我使用下面的行运行应用程序 是否可以在一个docker容器中运行上述场景?如果可能,当Dockerfile中只能有一条和指令时,如何实现这一点?

  • 我在运行代号为one的项目时突然遇到了一个问题, com.codename1.impl.javase.Simulator课程不在我的项目里 我也没有改变类路径或任何东西,其他项目工作正常, 任何人都可以帮忙,

  • 问题内容: 我可以运行多个JVM吗?如果是,那么我如何找到在哪个JVM上加载了特定的类? 问题答案: 您的意思尚不完全清楚,但是: 您可以在同一台计算机上安装多个VM(版本/品牌等) 您可以运行多个进程,无论是相同的JVM版本还是不同的JVM版本 除非您正在运行调试代理或类似的代理,否则我不知道有什么方法可以询问JVM进程是否加载了特定的类。似乎有点奇怪的要求-为什么要这样做?

  • 在一个android服务中,我创建了用于执行一些后台任务的线程。 我遇到一个情况,线程需要在主线程的消息队列上发布特定任务,例如。 有没有方法获取主线程的并从我的另一个线程向它发布/?

  • 我有一些使用下面某个模块的网页抓取Python代码 硒 bs4 MySQLdb 调度器 在网上或云上运行代码的最简单方法或平台是什么?