当前位置: 代码迷 >> J2SE >> 空指针错误, - -
  详细解决方案

空指针错误, - -

热度:154   发布时间:2016-04-24 01:26:03.0
空指针异常,? - -#
Java code
import java.awt.*;import javax.swing.*;class Astar extends JPanel {    int[][] map = {                    {1,1,0,0,0,0,0,0,0,0},                    {1,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,0,0,0,0},                    {0,0,0,1,1,1,1,1,0,0},                    {0,0,0,0,0,0,0,1,0,0},                    {0,0,0,0,0,0,0,1,0,0},                    {0,0,0,0,0,0,0,1,0,0},                    {1,1,1,0,0,0,0,0,0,0},                    {1,0,0,0,0,0,0,0,0,0},                    {0,0,0,0,0,0,1,1,0,0},               };     Cell[][] map1;          public Astar(){         map1 = new Cell[10][10];        for(int i=0;i<10;i++)            for(int j=0;j<10;j++)                map1[i][j].value = map[i][j];         JFrame f = new JFrame();         f.setBounds(100,100,600,500);         f.add(this);         f.setVisible(true);     }     public void paintComponent(Graphics g){        for(int i=0;i<10;i++){            for(int j=0;j<10;j++){                if(map[i][j]==0){                    g.draw3DRect(40*j,40*i,40,40,true);                    g.drawString(map1[i][j].toString1(),40*j,40*i);                }                else if(map[i][j]==1)                    g.fill3DRect(40*j,40*i,40,40,true);                    }            }    }    public static void main(String args[]){        new Astar();        }    class Cell{        int value;        boolean seen;        boolean open;        int direction;        Cell(){            seen = true;            open = true;            }        public String toString1(){            if(open)                return "Open";            else return "Closed";            }        }}


------解决方案--------------------
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
{
map1[i][j]= new Cell();
map1[i][j].value = map[i][j];
}
------解决方案--------------------
虽然map1 = new Cell[10][10];你初始化了一个二维Cell数组,但是你并没有对里面的每个Cell进行初始化,所以默认初始化值为null,用null来调用value,所以就报错了
------解决方案--------------------
空指针就是 xx.xx .前面的那个值为null; 比较好找
------解决方案--------------------
正解!
探讨
虽然map1 = new Cell[10][10];你初始化了一个二维Cell数组,但是你并没有对里面的每个Cell进行初始化,所以默认初始化值为null,用null来调用value,所以就报错了

------解决方案--------------------
数组默认是每个值都是null
  相关解决方案