該程序不起作用,但同時它沒有錯誤通知...每當我輸入一個起始點時,起點都會出現,但沒有路徑到達結束點或路徑通過。該程序有一個7 * 11的迷宮,「B」提出了障礙物和一個固定的結束點,其呈現爲「X」,程序會做什麼,您可以輸入一個座標,使其成爲您的起點。然後程序會從你的出發點到最後找到一種方法(路徑也將顯示爲「O」)。我試圖在這個過程中使用遞歸,但它不起作用,我不知道爲什麼。請幫幫我。Java中的遞歸迷宮
import java.io.*;
public class Maze {
private static final Maze[][] String = null;
String[][] Maze=new String[7][11];
int x,y;
public static void main(String[] args) throws IOException{
String name;
int k=0,x1,y1;
Maze M=new Maze();
System.out.println("Hello there, would you like to provide your name, please?");
name=M.Name();
M.Maze=M.Set(M.Maze);
M.Print(M.Maze);
while (k==0){
System.out.println(name+", now please enter coordinate of the starting point");
System.out.println("The left top point would be (0,0)");
System.out.println("Now, please enter the x value:");
M.x=M.Input();
System.out.println("And then, please enter the y value");
M.y=M.Input();
if (M.Maze[M.y][M.x]==" "){
M.Maze[M.y][M.x]="$";
k=1;
}
else
System.out.println("Sorry, you cannot put your starting point there, please try again");
}
M.Process(M.x,M.y);
M.Print(M.Maze);
System.out.println("$ is the Starting Point");
System.out.println("X is the Ending Point");
System.out.println("O is the Path");
}
public static String Name() throws IOException{
String name;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
name=br.readLine();
return name;
}
public static int Input()throws IOException{
int i;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
i=Integer.parseInt(br.readLine());
return i;
}
public static String[][] Set(String Maze[][]){
for(int i=0;i<7;i++){
for(int j=0;j<11;j++){
Maze[i][j]=("B");
}
}
Maze[1][1]=Maze[2][1]=Maze[3][1]=Maze[4][1]=Maze[5][1]=Maze[1][2]=Maze[1][3]=Maze[2][3]=Maze[3][3]=Maze[5][3]=Maze[3][4]=Maze[5][4]=Maze[1][5]=Maze[2][5]=Maze[3][5]=Maze[5][5]=Maze[3][6]=Maze[4][6]=Maze[5][6]=Maze[1][7]=Maze[2][7]=Maze[2][7]=Maze[3][7]=Maze[5][7]=" ";
Maze[6][7]="X";
Maze[1][8]=Maze[3][8]=Maze[1][9]=Maze[3][9]=Maze[4][9]=Maze[5][9]=" ";
return Maze;
}
public static boolean Process(int x1, int y1){
Maze M=new Maze();
if (Move(M.Maze,x1,y1)){
if (End(x1,y1))
return true;
}
else{
M.Maze[y1][x1]="1";
if (Process(x1-1,y1)){
M.Maze[y1][x1]="O";
return true;
}
else if(Process(x1+1,y1)){
M.Maze[y1][x1]="O";
return true;
}
else if (Process(x1,y1-1)){
M.Maze[y1][x1]="O";
return true;
}
else if (Process(x1,y1+1)){
M.Maze[y1][x1]="O";
return true;
}
}
return false;
}
public static boolean Move(String Maze[][],int x1, int y1){
if (x1<0||y1<0||x1>6||y1>10)
return false;
if ((Maze[y1][x1]=="B")||Maze[y1][x1]=="1")
return false;
return true;
}
public static boolean End(int x1, int y1){
if ((y1==7)&&(x1==5))
return true;
return false;
}
public static void Print(String Maze[][]){
for(int i=0;i<7;i++){
for(int j=0;j<11;j++){
System.out.print(Maze[i][j]);
System.out.print(" ");
}
System.out.println(" ");
}
}
}
你能否描述1)這個程序應該做什麼,2)*你怎麼認爲它做它應該做的事情? –
你是通過調試器來學習的嗎? –
請不要將'Maze'對象'String'和'String'對象'Maze'的數組調用。事實上,如果您爲變量名使用小寫字母,最好將它們與類名區分開來。 –