Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在事件(条件)发生时在java中动态创建对象_Java - Fatal编程技术网

在事件(条件)发生时在java中动态创建对象

在事件(条件)发生时在java中动态创建对象,java,Java,还有一个问题,我仍然从你们身上学到了很多,但现在我再次需要一些建议。首先,我将描述我想做什么。我的目标是创建一个区域并用点填充它。此外,我想将该区域分割为小区域,并为新区域指定正确的点。仅当事件发生时才应执行拆分,例如,如果区域中的点数超过特定的k。到目前为止,我有以下课程 public class Koord { private int number; private static int numberOfNodes = 0; private int x; private int y; p

还有一个问题,我仍然从你们身上学到了很多,但现在我再次需要一些建议。首先,我将描述我想做什么。我的目标是创建一个区域并用点填充它。此外,我想将该区域分割为小区域,并为新区域指定正确的点。仅当事件发生时才应执行拆分,例如,如果区域中的点数超过特定的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;
公共类地理区域{
私人住宅区;
私有LinkedList areaContacts=新建LinkedList();
/**
*将创建一个空的地理区域。
*/
公共地理区域(){
面积=新整数[4];
}
/**
*使用参数数组创建地理区域
* 
*@param x0
*@param x1
*@param y0
*@param y1
*/
公共地理区域(int x0、int x1、int y0、int y1){
this.area=新整数[4];
这个。面积[0]=x0;
这个。面积[1]=x1;
该面积[2]=y0;
这个。面积[3]=y1;
}
公共无效设置区域(int x0、int x1、int y0、int y1){
面积[0]=x0;
面积[1]=x1;
面积[2]=y0;
面积[3]=y1;
}
公共int getX0(){
返回区[0];
}
公共int getX1(){
返回区[1];
}
公共int getY0(){
返回区[2];
}
公共int getY1(){
返回区[3];
}
公共链接列表getAreaContacts(){
返回区域联系人;
}
public void setAreaContacts(LinkedList areaContacts){
this.areaContacts=areaContacts;
}
}
在GeoArea类中,我有该区域的坐标,还有一个链表,我想在其中保存属于该区域的点

我的第三节课是课堂展示:

 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());
 }
}
import java.util.LinkedList;
导入java.util.Random;
公开课展示{
公共静态void main(字符串参数[]){
Random rand=新的Random();
GeoArea Area 1=新的GeoArea(0,50,0,99);
地理区域2=新地理区域(51,99,0,99);
LinkedList ownArea=新建LinkedList();
Koord point1=新Koord(兰特nextInt(99),兰特nextInt(99));
Koord point2=新Koord(兰特nextInt(99),兰特nextInt(99));
Koord point3=新Koord(兰特nextInt(99),兰特nextInt(99));
Koord point4=新Koord(兰特nextInt(99),兰特nextInt(99));
Koord point5=新Koord(兰特nextInt(99),兰特nextInt(99));
Koord point6=新Koord(兰特nextInt(99),兰特nextInt(99));
Koord point7=新Koord(兰特nextInt(99),兰特nextInt(99));
ownArea.add(第1点);
ownArea.add(第2点);
ownArea.add(第3点);
ownArea.add(第4点);
ownArea.add(第5点);
ownArea.add(第6点);
ownArea.add(第7点);
适用于(库尔德c:ownArea){
如果(area1.getX0()>=c.getX()| | c.getX()

如你所见,这里我创建了一些随机坐标点。之后,我将它们添加到区域中。之后,我将遍历整个Own区域,并将坐标与区域1和区域2的坐标进行比较。因此,现在我的目标是在每次向其添加新点(Koord)时检查ownArea的大小,如果大小大于整数k,则将ownArea拆分为n(例如3)个部分。对我来说,最简单的方法是创建n个新区域,并将元素从ownArea复制到新区域。但是我想以友好的方式这样做,所以如果我改变“n”(要分割的区域数量),新区域的数量也会改变。你能给我一些建议吗。我真的很想学习一些东西,所以不要认为我需要完整的解决方案,提示和简单的例子也会很有帮助。最后-我的英语不是很好,所以我的解释很简单,而且我的语法也不是最好的,所以请随意提出任何修改。多谢各位

有几点建议:

由于需要可变数量的区域,因此可以将这些区域放入集合中,以便添加更多区域,而不是将它们作为实例变量保留。举个例子。如果需要按名称查找区域,请使用地图

然后,如果要替换某个区域,请将其从集合中删除并添加替换项


通过仅在一个维度上(例如在y轴上)将一个区域分割为n个子区域可能是最容易的。这样做时,请小心处理除以n后的余数。

好的,可能我必须删除单词“short”。我想把它写得简短一点,但在那之后我决定把它解释得更清楚一点。是的,我不想看太长的问题。我能理解你的意思,但我认为在这种情况下需要很长的解释。
 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());
 }
}