我有一个功能,一旦采取了一些食物,缩小了“食物银行”(在我的GUI中用矩形表示)的大小。我有以下功能检查:
public boolean tryToPickUpFood(Ant a)
{
int xCoord = a.getLocation().x;
int yCoord = a.getLocation().y;
for (int i = 0; i < foodPiles.size(); i++)
{
if (foodPiles.get(i).containsPoint(xCoord, yCoord))
{
foodPiles.get(i).decreaseFood();
return true;
}
}
return false;
}
其中decreaseFood缩小矩形..
public void decreaseFood()
{
foodAmount -= 1;
shrinkPile();
}
private void shrinkPile()
{
WIDTH -=1;
HEIGHT = WIDTH;
}
但是,每当一个矩形缩小时,所有矩形都会缩小。为什么会这样?
编辑:
正在添加食物堆:
addFoodPile(new Food(new Point(200,200)));
addFoodPile(new Food(new Point(400,340)));
public void addFoodPile(Food fp)
{
foodPiles.add(fp);
}
答案 0 :(得分:3)
因为阵列的每个元素都有相同的食物堆?如果您正在填充它
FoodPile foodPile = new FoodPile();
for (int i = 0; i < count; i++) {
foodPiles.add(foodPile)
}
你应该这样做:
for (int i = 0; i < count; i++) {
FoodPile foodPile = new FoodPile();
foodPiles.add(foodPile)
}
另外,这个循环:
for (int i = 0; i < foodPiles.size(); i++)
{
if (foodPiles.get(i).containsPoint(xCoord, yCoord))
{
foodPiles.get(i).decreaseFood();
return true;
}
}
如果使用foreach语法,可以更具可读性:
for (FoodPile foodPile : foodPiles)
{
if (foodPile.containsPoint(xCoord, yCoord))
{
foodPile.decreaseFood();
return true;
}
}
答案 1 :(得分:2)
这可能是你的问题 -
private void shrinkPile()
{
WIDTH -=1;
HEIGHT = WIDTH;
}
在标准Java命名约定中,所有大写名称都用于静态变量 - 因为你没有显示它们的声明,我不能确定 - 但它肯定是可疑的并且是一个值得关注的地方。
答案 2 :(得分:0)
我猜你以为你在List
中添加了很多单独的堆,但实际上你一遍又一遍地添加对同一个堆的引用。检查你的部分代码。
答案 3 :(得分:0)
根据您显示的代码,问题似乎在于tryToPickUpFood()的使用位置和频率。除非你使用了相同的foodPiles参考,正如其他答案所指出的那样