亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在最后一行代碼的主要方法中,我有一個目錄可以從我的桌面運行 maze.txt

在最后一行代碼的主要方法中,我有一個目錄可以從我的桌面運行 maze.txt

九州編程 2022-06-30 17:35:56
在最后一行代碼的主要方法中,我有一個目錄可以從我的桌面運行 maze.txt 來運行迷宮。我該如何解決這個問題,因為如果我將此代碼發送給其他人,他們必須打開文件并將目錄更改為他們與我的文件一起下載的 maze.txt 目錄。**迷宮.txt7 7GOOOOXOXXOXOOXOXOOOOXXXXXOOXOXXXXOXXSOOOOOXXXXXXXXimport 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]);
查看完整描述

2 回答

?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

有很多解決方案,具體取決于您的需要。

一個簡單的方法是,如果您希望用戶嘗試他們可以提供的不同 maze.txt 文件,則從命令行參數(即,從argsmain 方法的參數)獲取文件的路徑。

您可以將主要方法主體更改為:

MazeSolver ms = new MazeSolver(args[0]);

當然,還需要進一步檢查,但這與本練習無關。

然后,用戶從終端運行您的程序:

java MazeSolver /path/to/their/maze.txt

/path/to/their/maze.txtargs[0]在您的主要方法中捕獲。


查看完整回答
反對 回復 2022-06-30
?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

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;

      }

   }



}


查看完整回答
反對 回復 2022-06-30
  • 2 回答
  • 0 關注
  • 100 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號