我创建了一个包含点和索引号的这些对象的数组。我通过扫描仪分配它们,如下所示:
Points[] pointStorage = new Points[10];
pointStorage[index] = new Points(0,0,index);
index++;
while (s.hasNext()) { // s is the Scanner
double point1 = s.nextDouble(); // X-Coordinate
double point2 = s.nextDouble();
pointStorage[index] = new Points(point1,point2,index);
index++;
}
pointStorage[index] = new Points(0,0,index);
我有一个基本上显示所有对象内容的方法:
for (int i = 0; i < pointStorage.length; i++){
pointStorage[i].showPoint();
}
输出(作为例子):
The X co-ordinate is 0.0
The Y co-ordinate is 0.0
但是,在我的程序中,数组中的所有对象都已分配了最后一个创建对象的值(点0,0)。有什么特别的原因吗?我认为为每个人创建新地址会阻止这种情况。
编辑:
好的伙计们,所以我发现了问题。显然我已经为Point2D.Double(方法&#34; showPoint&#34;显示)设置了字段(对不起,如果那个术语是错误的,我是OOP的新手),静态的,显然这就是问题所在。我删除了静态修改器,现在它工作正常。抱歉浪费你的时间。答案 0 :(得分:0)
您不应该在new
循环中使用while
。您已经创建了10个点的数组,并且应该使用index
迭代。
确保将index
设置为0,然后在每个循环上测试数组边界。
当扫描程序返回false时,请考虑使用for
循环和break
。
for( index = 0; index < MAX; index ++ ) {
if( ! s.hasNext() )
break;
double point1 = s.nextDouble(); // X-Coordinate
double point2 = s.nextDouble();
Points[index] = Point( point1, point2, index);
}
这只是一个让你入门的粗略例子。玩得开心......
答案 1 :(得分:0)
使用静态修饰符时要小心。