我编写了这段代码,用于计算每个值的坐标点。
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值。我无法弄清楚原因。
答案 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_value
,0
除外)。
所以当你打电话
public Point get_coordinates(int n_v)
{
return this.node_loc;
}
this.node_loc
为null
,因此您返回null
。此外,正如评论中已经提到过的人:您从不使用n_v
,因此您应该重新考虑甚至保留该参数。