程序报OutOfMemoryError是什么原因


import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        char[][] chars=new char[15][15];
        //定义方向
        int[] walkx={-100,0,1,0,-1};
        int[] walky={-100,1,0,-1,0};
        int n=sc.nextInt();
        int m=sc.nextInt();
        sc.nextLine();
        //存地图(并找人找终点)
        int x=0,y=0,px=0,py=0;
        for (int i=1;i<=n;i++){
            String s=sc.next();
            for (int j=1;j<=m;j++){
                chars[i][j]=s.charAt(j-1);
                if (s.charAt(j-1)=='S'){
                    x=i;
                    y=j;
                }
                if (s.charAt(j-1)=='T'){
                    px=i;
                    py=j;
                }
            }
        }
        //开辟队列
        Queue<Point> q=new ArrayDeque<>();
        //存入头节点
        Point p=new Point();
        p.x=x;
        p.y=y;
        q.add(p);
        while (!q.isEmpty()){
            if (q.peek().x==px&&q.peek().y==py){    //说明到终点了
                System.out.println("yes");
            }
            for (int i=1;i<=4;i++){
                int dx=q.peek().x+walkx[i];
                int dy=q.peek().y+walky[i];
                if (dx>=1&&dx<=n&&dy>=1&&dy<=m&&chars[dx][dy]!='*'){
                    Point point=new Point();
                    point.x=dx;
                    point.y=dy;
                    q.add(point);
                }
            }
            q.remove();
        }
        System.out.println("no");
    }
}

class Point{
    int x;
    int y;
}

这个程序报OutOfMemoryError是什么原因,找了半天没想明白。。
```?%ra=link
题目链接https://nanti.jisuanke.com/t/T1595

数组越界异常了,注意定义的数组大小,访问数组索引长度不能大于等于数组长度。