0

というわけで、最近は 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.
    }
}

私が今やりたいことは、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
            }
        }
    }

これは明らかに機能していませんが、どのように見えるかをテストするためのもので、 initializeAndExecute()メソッドで動的に実行されないため、1 つの座標のみを出力します。

何か案は?もしかして二次元配列?(これを実装する方法がわかりません)

助けていただければ幸いです。

4

1 に答える 1

0

オブジェクトの Tile-Array を作成する必要があります。

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 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;
}

print-method で check-method を使用できるようになりました。

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();
    }
}

私は実際にはよくわかりません。なぜ初期化を100000回実行したいのですか...衝突を避けようとしていますか? その場合、使用した座標を保存して新しい座標を作成することができます。作成したばかりの座標が既に使用されていることがわかった場合

于 2013-09-17T13:08:49.623 に答える