类方法返回null值

时间:2017-07-11 08:38:38

标签: java class null

我编写了这段代码,用于计算每个值的坐标点。

nodeGenerator nG=new nodeGenerator(Permutation_S,WIDE,HIGH);
         nodes_permutation nP=new nodes_permutation();
         for(int i=0;i<Permutation_S.size();i++)
        {
             for(int j=0;j<Permutation_S.get(i).size();j++)
             {
                 Node.selectNone(nodes);
                 Point p = nP.get_coordinates((Integer) Permutation_S.get(i).get(j));

                 Color color = Color.blue;
                 Node n = new Node(p, radius, color, kind);
                 n.setSelected(true);
                 nodes.add(n);
                 repaint();
             }
        }

nodeGenerator类

public class nodeGenerator {


    static ArrayList <List> Permutation= new ArrayList <List> ();
    int x,y;
    int width,height;
    int strt_x_l,strt_y_l;
    int strt_x_r,strt_y_r;
    public nodeGenerator(ArrayList <List> list,int w, int h)
    {
        this.Permutation=list;
        this.width=w;
        this.height=h;
        this.strt_x_l=this.width/2-250;
        this.strt_y_l=100;
        this.strt_x_r=this.width/2+250;
        this.strt_y_r=50;

        allocate_Coordinates();
    }

    public void allocate_Coordinates()
    {
        for(int i=0;i<Permutation.size();i++)
        {
            if(Permutation.get(i).size()>1)
            {/*if we have 4 points*/
                if(i%2==0)
                {
                new nodes_permutation(new Point(this.strt_x_l, this.strt_y_l),(Integer) Permutation.get(i).get(0));
                new nodes_permutation(new Point(this.strt_x_l-50, this.strt_y_l+50),(Integer) Permutation.get(i).get(1));
                new nodes_permutation(new Point(this.strt_x_l, this.strt_y_l+100),(Integer) Permutation.get(i).get(2));
                new nodes_permutation(new Point(this.strt_x_l+50, this.strt_y_l),(Integer) Permutation.get(i).get(3));

                /*increment position*/
                strt_y_l+=200;
                }
                else
                {
                    new nodes_permutation(new Point(this.strt_x_r, this.strt_y_r),(Integer) Permutation.get(i).get(0));
                    new nodes_permutation(new Point(this.strt_x_r-50, this.strt_y_r+50),(Integer) Permutation.get(i).get(1));
                    new nodes_permutation(new Point(this.strt_x_r, this.strt_y_r+100),(Integer) Permutation.get(i).get(2));
                    new nodes_permutation(new Point(this.strt_x_r+50, this.strt_y_r),(Integer) Permutation.get(i).get(3));
                    strt_y_r+=200;
                }

            }
            else
            {/*for static points*/

            }
        }
    }
}

和nodes_permutation类

public class nodes_permutation {

    int node_value;
    Point node_loc;
    String node_label;

    public nodes_permutation(Point p,int n_v)
    {
        this.node_loc=p;
        this.node_value=n_v;
        if(n_v==-1)
        {
            this.node_label="inf";
        }
        else
        {
            this.node_label=Integer.toString(n_v);
        }
    }

    public nodes_permutation() {
        // TODO Auto-generated constructor stub
    }

    public Point get_coordinates(int n_v)
    {
        return this.node_loc;
    }


}

问题是 Point p = nP.get_coordinates((Integer)Permutation_S.get(i).get(j)); ,此行返回null值。我无法弄清楚原因。

1 个答案:

答案 0 :(得分:0)

这真的很简单......

nodes_permutation nP=new nodes_permutation();
     for(int i=0;i<Permutation_S.size();i++)
    {
         for(int j=0;j<Permutation_S.get(i).size();j++)
         {
             Node.selectNone(nodes);
             Point p = nP.get_coordinates((Integer) Permutation_S.get(i).get(j));

您创建了一个名为nodes_permutation的新nP(请考虑使用Java命名约定!)。但是,该类的空构造函数(所以你正在使用的那个)看起来像这样:

public nodes_permutation() {
    // TODO Auto-generated constructor stub
}

意思绝对没有任何反应。特别是变量

int node_value;
Point node_loc;
String node_label;

全部停留null(除了node_value0除外)。

所以当你打电话

public Point get_coordinates(int n_v)
{
    return this.node_loc;
}

this.node_locnull,因此您返回null。此外,正如评论中已经提到过的人:您从不使用n_v,因此您应该重新考虑甚至保留该参数。