Java空对象形成数组

时间:2018-10-17 20:22:20

标签: java arrays object

所以,我有一个程序,我需要获取一个数组对象。所以我必须检查那里的每个对象,但是显示错误。我认为这是因为获取空对象不起作用。我该怎么办?我是新来的...

get是this.x的简单返回,但是我认为由于null而中断了

public Sunflower get(int x, int y) {

boolean found=false;
Sunflower sun = null;

for(int i=0; i<MAX && found==false; i++) {

    if(array[i].getX() == x && array[i].getY() == y) sun= array[i];
}
    return sun;
}

谢谢您的帮助 ---------------------------编辑

添加数组[i]!= null无法正常工作。同样的错误。我认为仅查看不存在的位置可能会带来问题。我更改了数组大小的最大值,更多了逻辑。我需要检查位置,可以说(7,8),所以我看了x和y对象,但是我认为它没有找到任何导致错误的信息。 像这样的东西。

public void update(){

Sunflower sun = game.getSFinPosition(x, y-1);
if(sun!=null&& sun.getVida()!=0) sun.setLife();

}

如果没有找到任何东西,我得到的指配不起作用,但是我尝试在if和none里面写它,所以不知道。

3 个答案:

答案 0 :(得分:0)

在尝试访问成员变量之前,应检查null元素。 另外,您可以使用break而不是使用找到的布尔值。

公共向日葵get(int x,int y){

Sunflower sun = null;
for(int i=0; i<MAX; i++) {

    if(array[i] && array[i].getX() == x && array[i].getY() == y) {
        sun= array[i];
        break;
    }
}
return sun;

}

答案 1 :(得分:0)

如果要检查所有元素,则应使用 array.length 获取数组的最大索引。您还可以检查元素是否为null并跳过它:

public Sunflower get( int x, int y ) {
    boolean found = false;
    Sunflower sun = null;
    for (int i = 0; i < array.length && found == false; i++) {
        if (array[i] != null &&
                array[i].getX() == x && array[i].getY() == y) {
            sun = array[i];
            found = true;
        }
    }
    return sun;
}

答案 2 :(得分:0)

给出了您的代码的工作示例,并进行了一些改进:

public class Main {
  public static class Sunflower {
    private int x, y;

    Sunflower(int x, int y) {
      this.x = x;
      this.y = y;
    }

    int getX() {
      return x;
    }

    int getY() {
      return y;
    }
  }

  public static class Getter {
    private Sunflower[] array = {new Sunflower(1, 0), new Sunflower(0, 1), null, new Sunflower(3, 1)};

    Sunflower get(int x, int y) {
      for (Sunflower s : array) {
        if (s == null) continue;
        if (s.getX() == x && s.getY() == y) return s;
      }

      return null;
    }
  }

  public static void main(String[] args) {
    Getter getter = new Getter();

    assert getter.get(1, 0) != null;
    assert getter.get(1, 0) != null;
    assert getter.get(3, 1) != null;
    assert getter.get(3, 2) == null;
  }
}

您最感兴趣的功能:

Sunflower get(int x, int y) {
  for (Sunflower s : array) {
    if (s == null) continue;
    if (s.getX() == x && s.getY() == y) return s;
  }

  return null;
}

更改:

  1. 使用foreach的For循环
  2. 检查值是否为空
  3. 不设置found变量即可返回
  4. 否则返回null