2016-12-24 6 views
0

Я работаю над плагином SkyBlock, Bukkit java.Loop through coords

Я пытаюсь сделать так, что создает 100 островов в х, то один достигает 100 прибавляет к г ...

Пример первого острова были бы (0,0), (1,0) ... 100 островов (0, 1)

Но давайте говорить (3, 0) будет удален я хочу, чтобы заполнить этот слот

Я попытался с помощью

private static Vertex2 getNextGrid(int x){ 
    if(islands.isEmpty()) return new Vertex2(0, 0); 
    ArrayList<Island> currentX = new ArrayList<>(); 
    for(Island island : islands){ 
     if(island.getGrid().getX() == x) 
      currentX.add(island); 
    } 
    int z = 0; 
    ArrayList<Integer> total = new ArrayList<>(); 
    for(int i = 0; i < 100; i++) total.add(i); 

    for(Island island : currentX) 
     total.remove(island.getGrid().getY()); 
    if(total.isEmpty()) 
     getNextGrid(x++); 
    return new Vertex2(total.get(0), z); 
} 

Но я просто получаю NullPointerException в если (island.getGrid(). GetX() == х)

+0

Вы можете показать нам свои функции 'getGrid()' и 'getX()'? –

+0

@NoamHacker getGrid() просто возвращает Vector2 и getX() возвращает int ничего особенного –

+0

@Jacob a 'int' или' Integer'? – Jobin

ответ

0

Поскольку вы получаете нулевой указатель, это означает, что вы пытаетесь вызвать метод (или получить доступ к полю) в экземпляре, который не был установлен - в строке, указанной вами, есть два места, где это может быть.

  1. island - Если у вас есть нулевые значения в списке ваших островов, это приведет к появлению нулевого указателя, когда они будут достигнуты. Поскольку мы не знаем, что делается на островах за пределами фрагмента, это вполне может быть так. Если в списке разрешены нули, проверяйте их, когда вы зацикливаете на нем. Если нет, убедитесь, что ничто не может добавить нуль в список, проверяя любые методы, которые добавляют к нему элементы. Если остров равен null, вызов getGrid() завершится неудачно и вызовет нулевой указатель.
  2. island.getGrid() - Если остров не равен нулю, сетка вполне может быть. Проверьте, что то, что возвращает этот метод, никогда не может быть null или проверять его, когда вы его используете. Предполагая, что getGrid() имеет фоновое поле, убедитесь, что поле инициализировано, а не просто объявлено, т. Е. Для него установлено значение. Если getGrid() возвращает значение null, это приведет к сбою вызова getX() и вызову нулевого указателя.

 Смежные вопросы

  • Нет связанных вопросов^_^