为了账号安全,请及时绑定邮箱和手机立即绑定

Java空对象形成数组

Java空对象形成数组

青春有我 2021-11-24 15:16:02
所以,我有一个程序,我需要获取一个数组对象。所以我必须检查那里的每个对象,但它显示一个错误。我认为这是因为获取空对象不起作用。我该怎么做?我是新来的...get 是一个简单的返回 this.x,但我认为它因为空值而中断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;}谢谢你的帮助---------------------------编辑添加 array[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 和 nothing 中......所以不知道。
查看完整描述

3 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

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


公共向日葵获取(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;

}


查看完整回答
反对 回复 2021-11-24
?
手掌心

TA贡献1942条经验 获得超3个赞

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


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


查看完整回答
反对 回复 2021-11-24
?
莫回无

TA贡献1865条经验 获得超7个赞

如果你想检查所有元素,你应该使用array.length来获取数组的最大索引。您也可以检查元素是否为空并跳过它:


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;

}


查看完整回答
反对 回复 2021-11-24
  • 3 回答
  • 0 关注
  • 180 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信