如何在我的数组列表中找到一个元素?

时间:2018-11-19 08:09:31

标签: java arraylist

嗨,我是一名学生,在我的课堂上,我们正在编写一个蛇游戏,现在的问题学家认为,有时候吃掉苹果的游戏会冻结,我们发现这可能是由两个苹果产卵引起的处于同一位置,但我们不知道如何避免这种情况。苹果是在数组列表中生成的,所以我认为我们需要在数组列表中定位元素,以说不允许Programm在此处生成它们,并且需要寻找新的位置,直到找到一个没有现有苹果的苹果。

我在Internet上搜索了是否可以解决我的问题,但我认为这有点具体,或者我走的路错误,有些人会发现我找不到的。

如果您需要更多详细信息,请给我留言。我很高兴能帮助您:D。

private void createApples(int max) {

    int loop = 0;
    int appleX;
    int appleY;
    Element apple;
    boolean exists;
    int index;


    for (loop = 0; loop < max; loop++) {
      exists = false;

      do {
        appleX = 
            new Random().nextInt(bounds.width / SNAKE_SIZE) * 
            SNAKE_SIZE + SNAKE_SIZE / 2;
        appleY =
            new Random().nextInt(bounds.height / SNAKE_SIZE) *
            SNAKE_SIZE + SNAKE_SIZE / 2;

        index = 0;
        while (index < apples.size() && !exists) {
          exists = apples.get(index).equal(appleX, appleY);
          index++;
        }



        if (!exists) 
          exists = player.contains(appleX, appleY);
          exists = player2.contains(appleX, appleY);



      }
      while (exists);

      apple = new Element(appleX, appleY, SNAKE_SIZE, Color.white, bounds);
      apples.add(apple);
    }
  }

1 个答案:

答案 0 :(得分:2)

无需详细阅读代码:

if (!exists) 
  exists = player.contains(appleX, appleY);
  exists = player2.contains(appleX, appleY);

没有花括号,您只是将条件应用于此处的第一行。这是您的计算机将看到的:

if (!exists){
  exists = player.contains(appleX, appleY);
}

exists = player2.contains(appleX, appleY);

这意味着,无论您已经为exists计算了什么,它都会被player2的正确值覆盖。

但是只要player1player2都是真实的,您的存在就应该真实。

您可以改用以下内容:

  exists |= player.contains(appleX, appleY);
  exists |= player2.contains(appleX, appleY);

(简写为)

if (!exists) 
   exists = player.contains(appleX, appleY);

if (!exists) 
   exists = player2.contains(appleX, appleY);

您可以添加信息,apples是什么(类型)以及如何实现equals / hashcode上的Element方法吗?

while (index < apples.size() && !exists) {
  exists = apples.get(index).equal(appleX, appleY);
  index++;
}

(我想您是自欺欺人的,因为您也称其为equal而不是equals