回 帖 发 新 帖 刷新版面

主题:java初学者,问一个NullPointerException问题

如下代码在执行到a.addEdge(s,t,w)是会抛出异常,请问如何解决。
我先在类Edge里面声明了数组Edgei arr[20];然后在 Edge()方法里对 数组进行了分配空间,然后要对数组赋值,结果就出现了异常,请问要怎么办呢?

执行:
2 3
1 2 4
java.lang.NullPointerException
2 1 4
java.lang.NullPointerException
1 1 3
java.lang.NullPointerException


代码:
import java.util.Scanner;

public class InputByScanner {
    public static void main(String[]args){
        Scanner scan=new Scanner(System.in);
        int vN,eN,s,t,w;
        vN=scan.nextInt();
        eN=scan.nextInt();
        Edge a=new Edge(vN);
        for(int i=0;i<eN;i++)
        {
            s=scan.nextInt();
            t=scan.nextInt();
            w=scan.nextInt();
            a.addEdgea(s, t, w);
        }
        a.outputEdge();
    }
}
class Edgei{
    int s,t,w,next;
}
class Edge{
    int[]pre;
    int eN;
    int vN;
    Edgei [] arr;
    Edge(int t)
    {
        eN=0;
        vN=t;
        pre=new int [20] ;
        arr=new Edgei[100];
        for(int i=0;i<20;i++)
            pre[i]=-1;
    }
    void addEdgea(int s,int t,int w)
    {
        try{
            arr[eN].s=s;
            arr[eN].t=t;
            arr[eN].w=w;
            arr[eN].next=pre[s];
            pre[s]=eN;
            eN++;
        }catch(NullPointerException a){
            //System.out.println("NullPointerException!!!");
            System.out.println(a.toString());
        }
    }
    void outputEdge()
    {
        for(int i=1;i<=vN;i++)
        {
            int j=pre[i];
            while(j!=-1)
            {
                System.out.println(arr[j].s+"+"+arr[j].t+"+"+arr[j].w);
                j=pre[j];
            }
        }
    }
}

回复列表 (共1个回复)

沙发

问了下同学,知道了原来光new 数组还不行,还得对每一个数组元素 new 一下
以下名词都是自己凭感觉写的,不对请包涵。。。


import java.util.Scanner;

public class GraphFirst {
    public static void main(String[]args){
        Scanner scan=new Scanner(System.in);
        int vN,eN,s,t,w;
        vN=scan.nextInt();
        eN=scan.nextInt();
        Graph a=new Graph(vN,eN);
        for(int i=0;i<eN;i++)
        {
            s=scan.nextInt();
            t=scan.nextInt();
            w=scan.nextInt();
            a.addEdge(s, t, w);
            a.addEdge(t, s, w);
        }
        a.outputGraph();
    }
}
class BasicEdge{
    public int s,t,w,next;
}
class Graph{
    private int[]pre;
    private int eN,ei,vN;
    private BasicEdge [] arr;
    public Graph(int v,int e)
    {
        eN=e;
        vN=v;
        ei=0;
        pre=new int [v+2];
        /*初始化数组*/
        arr=new BasicEdge [2*e+4];
        /*初始化数组*/
        for(int i=0;i<v+2;i++)
            pre[i]=-1;
        /*初始化数组元素,由于int型为基本类型,不需要实例化*/
    }
    void addEdge(int s,int t,int w)
    {
        try{
            arr[ei]=new BasicEdge();
            /*初始化数组元素,由于BasicEdge为自定义类,需要实例化*/
            /*java对每一个对象——不论其层次——都要求实例化才能使用*/
            arr[ei].s=s;
            arr[ei].t=t;
            arr[ei].w=w;
            arr[ei].next=pre[s];
            pre[s]=ei;
            ei++;
        }catch(NullPointerException a){
            System.out.println(a.toString());
        }catch(ArrayIndexOutOfBoundsException b){
            System.out.println(b.toString());
        }
    }
    void outputGraph()
    {
        for(int i=1;i<=vN;i++)
            {
            int j=pre[i];
            while(j!=-1)
            {
                System.out.println("edge from "+arr[j].s+" to "+arr[j].t+" has weight "+arr[j].w);
                j=arr[j].next;
            }
        }
    }
    
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册