我想在Java中创建一个处理行的arraylist。不是java行。
我的初始化arraylist的代码:
private ArrayList <Line2D> lines;
// constructors
public IrregularPolygon()
{
myPolygon = new ArrayList<Point2D.Double>();
lines = new ArrayList<Line2D>();
}
制作线条并试图加入arraylist的代码:
public void draw(PApplet marker)
{
if (myPolygon.size() >= 2)
{
for (int i = 0; i < myPolygon.size() - 1; i++)
{
lines[0] = marker.line((float)myPolygon.get(i).getX(), (float)myPolygon.get(i).getY(), (float)myPolygon.get(i + 1).getX(), (float)myPolygon.get(i + 1).getY());
marker.line((float)myPolygon.get(0).getX(), (float)myPolygon.get(0).getY(), (float)myPolygon.get(i + 1).getX(), (float)myPolygon.get(i + 1).getY());
if (myPolygon.size() > 4 && i > 2)
{
myPolygon.remove(myPolygon.get(i));
}
}
}
}
由于某种原因,我不能做行[0] = ....它给我这个错误:表达式的类型必须是数组类型,但它解析为ArrayList
怎么了?
答案 0 :(得分:1)
如果lines
是ArrayList
,那么您需要调用lines.add(...)
或lines.set(0, ...)
,具体取决于当时阵列的大小。
答案 1 :(得分:1)
因为您正在使用列表,所以使用add / set方法将行对象添加到列表中,并使用get方法从列表中读取相同内容。
答案 2 :(得分:0)
由于某种原因,我不能做行[0] = ....它给了我这个错误:表达式的类型必须是数组类型但它 解析为ArrayList
怎么了?
替换
lines[0] = marker.line((float)myPolygon.get(i).getX(), (float)myPolygon.get(i).getY(), (float)myPolygon.get(i + 1).getX(), (float)myPolygon.get(i + 1).getY());
与
lines.add(marker.line((float)myPolygon.get(i).getX(), (float)myPolygon.get(i).getY(), (float)myPolygon.get(i + 1).getX(), (float)myPolygon.get(i + 1).getY()));
答案 3 :(得分:0)
由于某种原因,我不能做行[0] = ....
就像其他人说过的那样,你试图在ArrayList
对象上使用数组访问语法。那不行。
如果您要向ArrayList
添加对象,则需要使用add()
功能。
Line2D yourLine = //...
lines.add(yourLine);
然后,要获得一个对象,您将使用get()
函数。请注意,您已使用myPolygon
ArrayList
。
这条线要考虑的另一件事:
myPolygon.remove(myPolygon.get(i));
请注意,您从头开始迭代myPolygon
ArrayList
。因此索引按顺序为0,1,2 ......如果从myPolygon
中删除对象,则所有后续对象都会向下移动一个索引。因此,当循环迭代时,您转到下一个索引,但是在删除之前您已跳过该索引处的对象。这可能会导致意外行为和其他错误。要解决此问题,您应该使用Iterator
或以相反的顺序遍历ArrayList
。