Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何调试NullPointerException?_Java - Fatal编程技术网

Java 如何调试NullPointerException?

Java 如何调试NullPointerException?,java,Java,我试图把船放在一个基于控制台的棋盘游戏上,我有以下错误,不知道如何调试它们 线程“main”java.lang.NullPointerException中出现异常 在NavalBattle.Board.print(Board.java:570) 在NavalBattle.Board.placeships1(Board.java:267) 在NavalBattle.Board.(Board.java:61) 位于NavalBattle.Controller.start(Controller.jav

我试图把船放在一个基于控制台的棋盘游戏上,我有以下错误,不知道如何调试它们

线程“main”java.lang.NullPointerException中出现异常 在NavalBattle.Board.print(Board.java:570) 在NavalBattle.Board.placeships1(Board.java:267) 在NavalBattle.Board.(Board.java:61) 位于NavalBattle.Controller.start(Controller.java:29) 位于NavalBattle.Controller.main(Controller.java:21)

第570行是value=this.ships2[row][col].toString()


//板类
导入java.util.ArrayList;
导入java.util.Scanner;
公共班级委员会{
int x=0;
int y=0;
ArrayList player1=新的ArrayList();
ArrayList player2=新的ArrayList();
/**
*击中船只的射击次数
*/
私人整数命中率;
/**
*跟踪已被攻击的板的位置
*/
私有布尔[][]位置firedupon;
/**
*跟踪游戏中的船只
*/
私人船舶[][]艘船舶;
私人船舶[][]船舶2;
私人船舶【】【】船舶管理;
/**
*沉船的数量
*/
私人国际航运银行;
/**
*射击次数
*/
私人内部拍摄;
/**
*构造函数。初始化内部计数器并填充游戏
*用随机放置的船只登船。
*/
公共委员会(){
这个.hitCount=0;
this.shipsunk=0;
this.shotsFired=0;
董事会();
this.ships=新船[6][9];
this.ships2=新船[6][9];
this.locationsFiredUpon=新布尔值[6][9];
for(int row=0;row对于(int i=0;i调试NullPointerException的最佳方法是查看堆栈跟踪的第一行,即:

NavalBattle.Board.print(Board.java:570)
这意味着错误发生在Board.java文件的第570行。您应该转到文件中的这一行,查看该行中哪些变量可以为null

第570行是
value=this.ships2[row][col].toString();
。在这一行中,只有3项内容可以为null:

  • this.ships2
  • `这是第2页[世界其他地区]
  • `本文件第2页[行][列]
  • 如果无法立即看到其中哪一个为空,请使用IDE在那里设置断点并以调试模式启动程序。当IDE在该行停止时,请为上述3个表达式中的每一个创建“监视表达式”,或使用“计算表达式”功能。其中一个表达式应为空

    没有调试,我只能猜测,但我想我可以做出很好的猜测。
    this.ship2
    不太可能为空,因为我可以看到您在代码中对其进行了初始化。我也不认为这个。ships2[row]为空-我认为您在构造函数中正确地初始化了2D数组。因此,我认为是这个。ships2[row][col]这是null,在null上调用toString()会抛出NPE。为了证实我的理论,您可以将该行替换为:

    value = String.valueOf(this.ships2[row][col]);
    

    调试NullPointerException的最佳方法是查看堆栈跟踪的第一行,即:

    NavalBattle.Board.print(Board.java:570)
    
    这意味着错误发生在Board.java文件的第570行。您应该转到文件中的这一行,查看该行中哪些变量可以为null

    第570行是
    value=this.ships2[row][col].toString();
    。在这一行中,只有3项内容可以为null:

  • this.ships2
  • `这个
    value = String.valueOf(this.ships2[row][col]);