再提一个问题,我仍然从大家中学到很多东西,但是现在我需要一些建议。首先,我将描述我想做什么。我的目标是创建一个区域并用点填充它。此外,我想将区域划分为小区域,并为新区域分配正确的点。仅在事件发生时才执行拆分,例如如果区域中的点数超过特定数k。到目前为止,我有以下课程
public class Koord {
private int number;
private static int numberOfNodes = 0;
private int x;
private int y;
public Koord(int x, int y) {
this.x = x;
this.y = y;
this.number = ++numberOfNodes;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public int getNumber() {
return number;
}
}
Koord类使用坐标和静态计数器来表示点(仅因为我需要为点指定一些名称)。
import java.util.LinkedList;
public class GeoArea {
private int[] area;
private LinkedList<Koord> areaContacts = new LinkedList<>();
/**
* A empty GeoArea is created.
*/
public GeoArea() {
area = new int[4];
}
/**
* A GeoArea is created with the array of the parameters
*
* @param x0
* @param x1
* @param y0
* @param y1
*/
public GeoArea(int x0, int x1, int y0, int y1) {
this.area = new int[4];
this.area[0] = x0;
this.area[1] = x1;
this.area[2] = y0;
this.area[3] = y1;
}
public void setArea(int x0, int x1, int y0, int y1) {
area[0] = x0;
area[1] = x1;
area[2] = y0;
area[3] = y1;
}
public int getX0() {
return area[0];
}
public int getX1() {
return area[1];
}
public int getY0() {
return area[2];
}
public int getY1() {
return area[3];
}
public LinkedList<Koord> getAreaContacts() {
return areaContacts;
}
public void setAreaContacts(LinkedList<Koord> areaContacts) {
this.areaContacts = areaContacts;
}
}
在GeoArea类中,我具有该区域的坐标以及一个链接列表,我想在其中保存属于该区域的点。
我的第三堂课是Display课:
import java.util.LinkedList;
import java.util.Random;
public class Display {
public static void main(String args[]) {
Random rand = new Random();
GeoArea area1 = new GeoArea(0, 50, 0, 99);
GeoArea area2 = new GeoArea(51, 99, 0, 99);
LinkedList<Koord> ownArea = new LinkedList<Koord>();
Koord point1 = new Koord(rand.nextInt(99), rand.nextInt(99));
Koord point2 = new Koord(rand.nextInt(99), rand.nextInt(99));
Koord point3 = new Koord(rand.nextInt(99), rand.nextInt(99));
Koord point4 = new Koord(rand.nextInt(99), rand.nextInt(99));
Koord point5 = new Koord(rand.nextInt(99), rand.nextInt(99));
Koord point6 = new Koord(rand.nextInt(99), rand.nextInt(99));
Koord point7 = new Koord(rand.nextInt(99), rand.nextInt(99));
ownArea.add(point1);
ownArea.add(point2);
ownArea.add(point3);
ownArea.add(point4);
ownArea.add(point5);
ownArea.add(point6);
ownArea.add(point7);
for(Koord c : ownArea) {
if (area1.getX0() >= c.getX() || c.getX()< area1.getX1()) {
area1.getAreaContacts().add(c);
} else {
area2.getAreaContacts().add(c);
}
System.out.println("x: " + c.getX() + " y: " + c.getY() + " Element number" + c.getNumber());
}
for(Koord c : area1.getAreaContacts()) {
System.out.println("Area 1 x: " + c.getX() + " y: " + c.getY() + " Element number" + c.getNumber());
}
for(Koord c : area2.getAreaContacts()) {
System.out.println("Area 2 x: " + c.getX() + " y: " + c.getY() + " Element number" + c.getNumber());
}
System.out.println("List size:" + area1.getAreaContacts().size());
System.out.println("List size:" + area2.getAreaContacts().size());
}
}
如您所见,我在这里创建一些具有随机坐标的点。之后,我将它们添加到该区域ownArea中。之后,我将遍历整个ownArea并将坐标与两个区域area1和area2的坐标进行比较。因此,现在我的目标是每次我向其添加新点(Koord)并检查大小是否大于整数k来将ownArea拆分为n(例如3)部分时都要检查ownArea的大小。对我而言,最简单的方法是创建n个新区域,并将元素从ownArea复制到新区域。但是我想做到这一点,因此,如果我更改“ n”(要分割的区域数),则新区域的数目也会更改。你能给我一些建议吗?我真的想学习一些东西,所以不要以为我需要完整的解决方案,提示和简单的示例也将有所帮助。最后-我的英语不太好,所以我的解释很简单,语法也不是最好的,所以可以提出任何修改建议。非常感谢你。
最佳答案
一些建议:
由于需要可变数量的区域,因此可以将区域放入集合中,以便可以添加更多区域,而不是将其保留为实例变量。例如清单。如果需要按名称查找区域,请使用地图。
然后,当您要替换区域时,将其从集合中删除并添加替换项。
通过仅在一个维度(例如,在y轴上)上将区域划分为n个子区域,可能是最简单的方法。这样做时,请小心处理除以n后的任何余数。
关于java - 发生事件(条件)时在Java中动态创建对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29102033/