0

私のアプリでエラーを探していますが、ここに表示されます:

for (int y=0; y<MAP_HEIGHT; y+=10) {
    for (int x=0; x<MAP_WIDTH; x+=10) {
        Label:

        for (GameResource res : resources) {
            //Checks if some object is already at given point
            if (res.getArea().contains(new Point2D.Float(x, y))) { 
                continue Label;
            }
        }

        if ((int)(Math.random()*200) == 0) {
            resources.add(new GameTree(x, y));
        }

        if ((int)(Math.random()*400) == 0) {
            resources.add(new GameMine(x, y));
        }
    }
}

マップを作成します。確認したところ、あるオブジェクトが特定のポイントにある場合でも、それにもかかわらずリソースが配置されているようです。ラベルを正しく使用しましたか?ポイントを使用する場合は、x-forループで次の反復に進みます。

4

2 に答える 2

1

xループの次の反復に進みたい場合は、ラベルをxループに配置する必要があります。

Label: for (int x = 0; x < MAP_WIDTH; x += 10)
于 2013-02-07T17:38:07.350 に答える
1

ラベルなしで行うこともできます。

    for (int y=0; y<MAP_HEIGHT; y+=10) {
        for (int x=0; x<MAP_WIDTH; x+=10) {

            if (noResourcesAtPoint(resources, x, y))
            {
                if ((int)(Math.random()*200) == 0) {
                    resources.add(new GameTree(x, y));
                }

                if ((int)(Math.random()*400) == 0) {
                    resources.add(new GameMine(x, y));
                }
            }
        }
    }       


private boolean noResourcesAtPoint(GameResources resources, int x, int y)
{
    for (GameResource res : resources)
    {
        if (res.getArea().contains(new Point2D.Float(x,y)))
        {
            return false;
        }
    }
    return true;
}
于 2013-02-07T18:05:58.253 に答える