【问题标题】:How to create an ArrayList of lines in Java processing?如何在 Java 处理中创建行的 ArrayList?
【发布时间】:2017-01-28 19:11:23
【问题描述】:

我想在 Java 中创建一个处理线数组列表。不是 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));
           }
       }
   }

}

由于某种原因,我不能做 lines[0] = ...。它给了我这个错误:表达式的类型必须是数组类型,但它解析为 ArrayList

怎么了?

【问题讨论】:

  • marker.line(...) 返回什么?
  • 画一条线
  • 你需要把那些超长的代码行分解成一些变量。这几乎无法阅读。
  • 那些变量只是方法的参数

标签: java arraylist processing


【解决方案1】:

如果linesArrayList,那么您将需要调用lines.add(...)lines.set(0, ...),具体取决于当时数组的大小。

【讨论】:

  • 我明白了:
  • ArrayList类型中的set(int, Line2D)方法不适用于参数(int, void)
  • 我的猜测是处理线实际上并没有返回一行
  • 您究竟是如何使用该行来导致该问题的?
  • 我正在尝试将它正在制作的行添加到数组中,但它不会让我这样做。如果我不使用 add 方法,它只会在屏幕上画一条线。
【解决方案2】:

因为您使用的是列表,所以使用 add/set 方法将行对象添加到列表中,并使用 get 方法从列表中读取相同的对象。

【讨论】:

    【解决方案3】:

    由于某种原因,我不能做 lines[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()));

    【讨论】:

    • 你的 pApplet 类的 'line' 方法的返回类型是什么?
    • @LarryJing 如果您想获得问题的解决方案,您需要快速响应。您没有为任何人提供足够的信息来为您提供解决方案。
    • 我真的不知道返回类型是什么,只是处理线而已。
    【解决方案4】:

    由于某种原因,我不能做 lines[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

    【讨论】:

      猜你喜欢
      • 2020-05-18
      • 1970-01-01
      • 2011-05-23
      • 2013-07-05
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      相关资源
      最近更新 更多