Я вижу следующие ошибки:
- Неверная формула размера массива.
- Включая
line_tmp
(который кажется вашим счетчиком столбцов) в вашем y expression. - Наличие двух переменных,
line_count
и line_temp
, которые всегда равны. - Наличие внешнего цикла для подсчета по узлу, а не по строке.
- Имея в общем бессмысленные имена переменных и магические числа.
// I use <b>java.util.ArrayList</b> because using its add(..) method is convenient here.
// The proper forumula for anticipated number of nodes is: base×(base+1)÷2
final List<Field> fields = new ArrayList<Field>(BASE*(BASE+1)/2);
// I use a <b>java.awt.Point</b> to store the (x,y) value of the first node of the row.
// This clarifies the meaning, rather than using ints or long inline expressions.
final Point rowStart = new Point(PANEL_WIDTH/2, DIAMETER);
// The number of rows equals the number of nodes on the final row.
for (int row = 1; row <= BASE; row++) {
// The <i>n</i>th row has <i>n</i> nodes.
for (int circle = 0; circle < row; circle++) {
// Each row starts at rowStart and each subsequent circle is offset to
// the right by two times the circle diameter.
fields.add(new Field(0, rowStart.x + circle*DIAMETER*2, rowStart.y));
}
// Each subsequent row starts a little down and to the left of the previous.
rowStart.x -= DIAMETER;
rowStart.y += DIAMETER;
}
Не забудьте использовать это только как справку для исправления вашего собственного кода, если это домашняя работа.