Java 如何使用右侧50个对象的坐标打印20x20的字段';盒子';(爪哇)

Java 如何使用右侧50个对象的坐标打印20x20的字段';盒子';(爪哇),java,coordinates,field,Java,Coordinates,Field,所以我最近一直在忙着用400块瓷砖的世界中的50个对象来创建一些世界 下面是一个方法的代码,该方法使用随机坐标初始化50个对象的数组,然后检查重复项-根据参数的值,它执行该操作的次数,我输入1000000以获得良好的概率计算,因此它运行此方法1000000次。-代码如下: public void initializeAndExecute(int runAmount) { tiles = new String[49]; //array size for (int k = 0; k

所以我最近一直在忙着用400块瓷砖的世界中的50个对象来创建一些世界

下面是一个方法的代码,该方法使用随机坐标初始化50个对象的数组,然后检查重复项-根据参数的值,它执行该操作的次数,我输入1000000以获得良好的概率计算,因此它运行此方法1000000次。-代码如下:

public void initializeAndExecute(int runAmount) {
    tiles = new String[49]; //array size

    for (int k = 0; k < runAmount; k++) { //amount of generating new array
        for (int i = 0; i < 49; i++) { //put 50 objects in array
            tile = new Tile();
            tiles[i] = (tile.printXandY()); //put coordinates at this index
        }//eind for
        checkDupes(); //check collisions
        if (duplicates != 0) { //if collision , counter++, duplicates reset.
            runWithCollision++; //for probability calculation
            duplicates = 0;
        }
        run++; //run always ++ even if no duplicates, voor probability calculation.
    }
}
public void初始化dexecute(int runAmount){
tiles=新字符串[49];//数组大小
对于(int k=0;k
所以我现在要做的是有一个400个平铺(20x20)的区域,如果一个对象在该区域中的位置相等,则根据坐标放置[*]。如果同一点上有多个对象,请执行类似[**]的操作。下面是我的field()方法的代码:

public void field() {


    for (int p = 0; p < 20; p++) { //for 20 rows
        for (int o = 0; o < 19; o++) { //to fill rows
            if (tile.getX() == o && tile.getY() == p) {
                System.out.print("[*]");
            } else {
                System.out.print("[_]");
            }
            if (o == 18) {
                System.out.println("[_]"); //newline
            }
        }
    }
public void字段(){
对于(int p=0;p<20;p++){//20行
用于(into=0;o<19;o++){//填充行
if(tile.getX()==o&&tile.getY()==p){
系统输出打印(“[*]”);
}否则{
系统输出打印(“[\u]”);
}
如果(o==18){
System.out.println(“[\u]”);//换行符
}
}
}
这显然不起作用,但它是为了测试它的外观,它只打印一个坐标,因为它不是在initializeAndExecute()方法中动态执行的

有什么想法吗?也许是二维数组?(我不知道如何实现)


非常感谢您的帮助!

您应该为您的对象制作一个平铺阵列:

public void initializeAndExecute(int runAmount) {
   tiles = new Tile[50]; //array size, 50!!!

   for (int k = 0; k < runAmount; k++) { //amount of generating new array
       for (int i = 0; i < 50; i++) { //put 50 objects in array
           tiles[i] = new Tile(); //constructor creates random coordinates
       }
       ...
   }
}
public void初始化dexecute(int runAmount){
tiles=新Tile[50];//数组大小,50!!!
对于(int k=0;k
您可以创建一个方法来检查对象是否在字段上:

public boolean objectIsOnField(int x, int y){
    for(int i = 0;i < tiles.length;i++){
        Tile t = tiles[i];
        if(t.getX() == x && t.getY() == y)
            return true;
    }
    return false;
}
公共布尔对象字段(int x,int y){
对于(int i=0;i
现在,您可以在打印方法中使用检查方法:

public void printField(){
    for(int i = 0;i < 20;i++){
        for(int j = 0;j < 20;j++){
            if(objectIsOnField(j, i)) //j is for x because j iterate through line
                System.out.print("[*]");
            else
                System.out.print("[_]");
        }
        System.out.println();
    }
}
public void printField(){
对于(int i=0;i<20;i++){
对于(int j=0;j<20;j++){
if(objectIsOnField(j,i))//j代表x,因为j通过行进行迭代
系统输出打印(“[*]”);
其他的
系统输出打印(“[\u]”);
}
System.out.println();
}
}

我真的不明白,为什么要运行100000次初始化…您是否试图避免冲突?如果这样,您可以保存使用过的坐标并简单地创建新坐标,如果您看到刚才创建的坐标已经被使用了,请首先:tiles=new String[49];我以为你想创建50个对象?第二:你是否将坐标存储为字符串?tiles[i]=(tile.printXandY());也许你应该将你的tile放入一个tile数组?tiles=new tile[50];然后你如何将它们放入具有精确坐标的字段中?类似于:tiles[i]=new tile(x,y);Tile对象知道他的坐标,因此如果您想稍后检查它,只需在tiles数组上迭代并使用Tile.getX()我如何在输出上打印像[]这样的字段然后根据坐标将对象放入其中。将有400个平铺和50个带坐标的对象。非常感谢Johnny:)我运行了100万次,以获得一个很好的重复概率计算。我想这是可以的,只要你真的需要这些信息:)