BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #17835同步于 2011/4/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

求解。一个空指针问题,处理后出现的问题。

wnfd369
2011/4/4镜像同步2 回复
package maze; //利用栈 解决迷宫问题 public class MyMaze { public static int mg[][]={{1,1,1,1,1,1},//地图迷宫,其四周是为1的外框 {1,0,0,0,1,1}, {1,0,1,0,0,1}, {1,0,1,0,1,1}, {1,1,0,0,0,1}, {1,1,1,1,1,1}}; public static Point[] stack=new Point[50];//栈 for(int i=0; i<50; i++){// ???????????????????????????? Point p=new Point(); stack[i]=p; } public static int top=-1;//栈顶指针 // public static int path[];//保存最短路径的数组 // public static int minLen;//最短路径长度。 public MyMaze(){ } public static int mgPath(int xi,int yi,int xe,int ye){//探索路径为:(xi,yi)->(xe,ye) int i=0,j=0,di=-1,find=0; top++; stack[top].i=xi; stack[top].j=yi; stack[top].di=-1;//初始结点进栈 mg[1][1]=-1; while(top>-1){//栈不为空时循环 i=stack[top].i;j=stack[top].j;di=stack[top].di;//取栈顶方块 if(i==xe&&j==ye){//找到了出口,输出路径 System.out.println("迷宫路径如下:"); for(int k=0;k<=top;k++){ System.out.println("("+stack[k].i+","+stack[k].j+")"); if((k+1)%5==0)//每输出五个方块后换一行 System.out.println(); } return 1; } find=0; while(di<4&&find==0){//找(i,j)方块下一个可走方块 di++; switch(di){//方向规定按顺时针方向来探索 case 0: i=stack[top].i-1;j=stack[top].j;break; case 1: i=stack[top].i;j=stack[top].j+1;break; case 2: i=stack[top].i+1;j=stack[top].j;break; case 3: i=stack[top].i;j=stack[top].j-1;break; } if(mg[i][j]==0) find=1;//找到下一个可走相邻方块 } if(find==1){//找到了一个可走的相邻方块 stack[top].di=di;//修改原栈顶元素的di值 top++; stack[top].i=i;stack[top].j=j;stack[top].di=-1; mg[i][j]=-1;//避免重复走到该方块,将其置为-1 }else{//没有相邻方块可走,则退栈。 mg[stack[top].i][stack[top].j]=0;//让该位置变为其他路径可走方块。 top--;//将该方块退栈 } } return 0; } public static void main(String[] args) { MyMaze.mgPath(1, 1, 4, 4); } } 出现问题的地方我已经用???标注了。先谢谢各位。
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
fykhlp机器人#1 · 2011/4/4
for(int i=0; i<50; i++){// ???????????????????????????? Point p=new Point(); stack[i]=p; 这循环体应该放在一个方法内,而不是直接在类里写
wnfd369机器人#2 · 2011/4/5
非常感谢。我明白了