aming12321_ 2023-03-14 11:22 采纳率: 75%
浏览 36
已结题

空指针异常 java.lang,如何解决?

java.lang.NullPointerException
空指针异常 找了半天没找到
有会的指导一下吗
java.lang.NullPointerException

package Search;

import java.io.IOException;
import java.util.Scanner;

public class Chuanyueleichi1 {
/*
* 题目描述
X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,
否则将报废。
某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),
怎样走才能路径最短?

已知的地图是一个方阵,上面用字母标出了A,B区,
其它区都标了正号或负号分别表示正负能量辐射区。
例如:
A + - + -
- + - - +
- + + + -
+ - + - +
B + - + -

坦克车只能水平或垂直方向上移动到相邻的区。

输入格式
输入第一行是一个整数n,表示方阵的大小, 4<=n<100
接下来是n行,每行有n个数据,可能是A,B,+,-中的某一个,中间用空格分开。
A,B都只出现一次。
输出格式
要求输出一个整数,表示坦克从A区到B区的最少移动步数。
如果没有方案,则输出-1

样例输入
5
A + - + -
- + - - +
- + + + -
+ - + - +
B + - + -
样例输出
10

思想
1.图的广度优先算法 直接算出最短路径所用,数据结构 队列(在chuanyueleichi2中具体实现)
2.图的深度优先算法 遍历所有路径,求出最小路径(具体在本类实现)


步骤
一.建立全局变量
    1.坐标(x,y)
    2.当前区域辐射值
    3.达到该区所走步数
二.输入,初始化节点
    1.找到A区位置,并赋值给dfs入口
三.dfs建立
    1.注意回溯
*/
public static String[][] arr  = new String[101][101] ;
public static int n = 0;//雷区大小
public static int x =0,y =0;
public static int min = 0;//记录到达B区最小步数
public static int[][] visit =  new int[101][101];//标记已走过的雷区 初始值为0 表示都没走过
public static int []fx = {1,0,-1,0};
public static int []fy = {0,-1,0,-1};//表示移动方向分别是 下 右 上 左
public static void main(String[] args) throws NumberFormatException, IOException {
    // TODO Auto-generated method stub
    
    Scanner sc = new Scanner(System.in);
     n = sc.nextInt();//雷区大小
    int a = 0,b=0;
    //arr = new String[n+1][n+1];
    //visit = new int[n+1][n+1];
    for(int i = 1 ; i <= n; i++) {
        for(int j = 1 ; j<= n ;j++) {
            arr[i][j] = sc.next();
            
            if(arr[i][j].equals("A")) {
                a = i;
                b = j;
            }
        }
    }
    dfs(a,b,"o",0);
    System.out.println(min);
}

//输入为坐标  当前的状态(+,-,A,B),当前的步数
private static void dfs(int x, int y, String status, int step) {
    // TODO Auto-generated method stub
    if(arr[x][y].equals("B")) {
        min = Math.min(step, min);
        return ;
    }
    
    int x1 = 0 ,y1 = 0;//表示移动的坐标
    for(int i = 0 ; i < 4 ;i++) {
        x1 = x +fx[i];
        y1 = y +fy[i];
        //判断接下来的雷区是否符合要求 且没有重复
        if( is(x1,y1,x,y)&&visit[x1][y1]!=1) {
            //符合的话 标记 已访问
            visit[x1][y1]=1;
            dfs(x1,y1,arr[x1][y1],step+1);//进入递归
            //当前递归结束 访问标记位取消 以免 访问不到B区(如果有B 区的话)
            visit[x1][y1]=0;
        }
    }
    
    
}

private static boolean is(int x1, int y1,int x,int y) {
    // TODO Auto-generated method stub
    if(x1 >= 0&& x1 <= n && y1 >= 0&& y1 <=n&&arr[x1][y1]!=arr[x][y])
        return true;
    return false;
}

}

Exception in thread "main" java.lang.NullPointerException
at BlueCup/Search.Chuanyueleichi1.dfs(Chuanyueleichi1.java:90)
at BlueCup/Search.Chuanyueleichi1.dfs(Chuanyueleichi1.java:103)
at BlueCup/Search.Chuanyueleichi1.dfs(Chuanyueleichi1.java:103)
at BlueCup/Search.Chuanyueleichi1.dfs(Chuanyueleichi1.java:103)
at BlueCup/Search.Chuanyueleichi1.dfs(Chuanyueleichi1.java:103)
at BlueCup/Search.Chuanyueleichi1.main(Chuanyueleichi1.java:83)

  • 写回答

4条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-14 14:52
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 已采纳回答 3月21日
  • 创建了问题 3月14日

悬赏问题

  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题