植物是100乘100花园中的JAVA对象,如何检查每种植物?

植物是100乘100花园中的JAVA对象,如何检查每种植物?,java,class,database-design,constructor,coordinates,Java,Class,Database Design,Constructor,Coordinates,我有一门课叫Plant。它有这样一个构造函数 int xPosition, yPosition; String plantType; int Size; public Plant(String ptype, int s) { xPosition = xPos; yPosition = yPos; plantType = ptype; Size = s; } 我想跟踪这些虚拟植物。一次只能有一个工厂位于一个位置。我决定也许我可以使用数组 Plant[][]

我有一门课叫Plant。它有这样一个构造函数

int xPosition, yPosition;
String plantType;
int Size;


public Plant(String ptype, int s) {

    xPosition = xPos;
    yPosition = yPos;
    plantType = ptype;
    Size = s;

}
我想跟踪这些虚拟植物。一次只能有一个工厂位于一个位置。我决定也许我可以使用数组

Plant[][] fieldOfPlants;
    fieldOfPlants = new Plant[100][100];

    for (int i = 0; i < 100; i++) {
        for (int j = 0; j < 100; j++) {
            fieldOfPlants[i][j] = new Plant(i, j, "none", false);
        }
    }


    // Plant the seeds at these locations.
    fieldOfPlants[12][14].plantType = "noodle plant";
    fieldOfPlants[12][14].seedPlant();
Plant[];
植物领域=新植物[100][100];
对于(int i=0;i<100;i++){
对于(int j=0;j<100;j++){
植物领域[i][j]=新植物(i,j,“无”,假);
}
}
//把种子种在这些地方。
植物领域[12][14]。plantType=“面条厂”;
植物领域[12][14]。种子植物();
这是有道理的,但是i,j坐标和xPos,yPos坐标不同步不是很糟糕吗?把位置放在两个地方似乎是个糟糕的设计


如何从构造函数中消除XPO和YPO?

一种常见的方法是使用。这本质上是一个所有内容都是静态的类,因此您不需要创建该类的任何实例。在这种情况下,您可能需要一个“花园”类来跟踪您所有的植物。假设您不打算拥有多个花园,这将是应用程序的花园类,这就是为什么它是一个静态类。为了跟踪所有植物,garden类将需要包含“植物场”数组,为了有用,它需要实现一些实用方法来访问该数组。下面是我将如何实现garden类:

//注意最后一个修饰符。这是静态类的标准,因为
//没有必要扩展它们。
公开期末班花园{
//这是您的“植物场”数组。请注意,它是静态的,因此不绑定到
//任何情况。
私人静态最终工厂[]现场工厂=新工厂[100][100];
//注意私有构造函数。这也是静态类的标准
//因为初始化它们是没有意义的,因为一切都是静态的。
私人花园(){}
//这是一种获取给定工厂位置的实用方法
//通过数组进行线性搜索,并在找到匹配项时返回位置。
//您可以找到更快的算法,但出于演示目的,线性
//搜索就可以了。
公共静态点getPlantLocation(工厂){
对于(int i=0;i<100;i++){
对于(int j=0;j<100;j++){
if(工厂的现场[i][j]==工厂){
返回新点(i,j);
}
}
}
//如果我们走到这一步,那就意味着植物不在任何植物的领域
抛出新的NoTouchElementException();
}
//这是一种实用的方法,相反,它可以找出哪种植物在某一特定的位置
//它只返回数组中正确的索引。
公共静态植物种植园(int x,int y){
_植物的返回场_[x][y];
}
//这是一种在花园中种植植物的实用方法。
//它只是将数组的适当索引设置为传入的plant对象。
公共静态真空装置(内部x、内部y、工厂){
现场植物[x][y]=植物;
}
}
然后在plant类中,您只需删除位置信息,仍然可以添加使用工厂位置的方法:

公共级工厂{
//请注意,植物只知道它的类型和大小。
私有整数大小;
私有最终字符串类型;
公用设备(字符串类型,int s){
plantType=ptype;
尺寸=s;
}
//此方法通过调用静态类的实用程序来使用工厂的位置
//方法。
公共作废打印信息(){
点位置=Garden.getPlantLocation(此);
System.out.format(“我是%s,我的大小是%d。我在第%d行第%d列。%n”,
植物类型、大小、位置.y、位置.x);
}
}
您可以使用以下简单的驱动程序类来测试所有这些:

公共类驱动程序{
公共静态void main(字符串参数[]){
_工厂的现场_[12][14]=新工厂(“面条工厂”,0);
字段_OF_PLANTS[12][14]。打印信息();
}
}
结果应该是:

我是一家面条厂,我的尺码是0。我在第14行第12列。

通过这种方式,您只在花园类中存储了每种植物的位置一次,但每种植物仍然可以确定它在花园中的位置。

一种常见的方法是使用。这本质上是一个所有内容都是静态的类,因此您不需要创建该类的任何实例。在这种情况下,您可能需要一个“花园”类来跟踪您所有的植物。假设您不打算拥有多个花园,这将是应用程序的花园类,这就是为什么它是一个静态类。为了跟踪所有植物,garden类将需要包含“植物场”数组,为了有用,它需要实现一些实用方法来访问该数组。下面是我将如何实现garden类:

//注意最后一个修饰符。这是静态类的标准,因为
//没有必要扩展它们。
公开期末班花园{
//这是您的“植物场”数组。请注意,它是静态的,因此不绑定到
//任何情况。
私人静态最终工厂[]现场工厂=新工厂[100][100];
//注意私有构造函数。这也是静态类的标准
//因为初始化它们是没有意义的,因为一切都是静态的。
私人花园(){}
//这是一种获取给定工厂位置的实用方法
//通过数组进行线性搜索,并在找到匹配项时返回位置。
//你可以找到更快的算法,但是为了演示