Нулевые объекты Java образуют массив - PullRequest
0 голосов
/ 17 октября 2018

Итак, у меня есть программа, и мне нужно получить объект массива.Поэтому я должен проверить каждый объект там, но он показывает ошибку.Я думаю, это потому, что получение нулевого объекта не работает.Как я должен это делать?Я новичок в этом ...

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;
}

Спасибо за вашу помощь -------------------------- EDIT

Добавление массива [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 и ничего ... так что понятия не имею.

Ответы [ 3 ]

0 голосов
/ 17 октября 2018

Вы должны использовать 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;
}
0 голосов
/ 17 октября 2018

Рабочий пример с вашим кодом, с некоторыми улучшениями:

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
  2. Проверить, является ли значение нулевым
  3. Возврат без установки переменной found
  4. В противном случае вернуть ноль
0 голосов
/ 17 октября 2018

Вы должны проверить наличие нулевого элемента, прежде чем пытаться получить доступ к переменной члена.Также вы можете использовать break вместо логического выражения found.

public Sunflower 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;

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...