2015-12-10 3 views
1

Newby вопрос здесь, чтобы я мог подумать об этом неправильно, так как я не очень опытен с объектами. У меня есть 27x27 сетки объектов, которые я создал, как это:Как создать/ссылаться на другой объект с объекта?

Square grid[][] = new Square[27][27]; 

Теперь, мне нужно, чтобы получить каждый из этих объектов в контейнер под названием Environment1 с помощью метода add(ColonyNode, int int) таким образом, каждый Square ссылки ColonyNode объект, а затем каждый ColonyNode добавляется к контейнеру Environment1 по вышеуказанному методу. Метод ColonyNodeView add обрабатывает, как они помещаются в контейнер, следовательно, параметры 2 int. Я просто не могу понять, как связать объекты Square с объектами ColonyNode и искать идеи.

То, что я пытался до сих пор, но не работа:

for(int i = 0; i<grid.length; i++){ 
     for(int j = 0; j <grid[i].length; j++){ 
      ColonyNodeView newSquare = new ColonyNodeView(); 
      Environment1.add(newSquare, i, j); 
     } 
    } 

ОК, я буду делать все возможное, чтобы объяснить общую цель этой части программы. Environment1 является контейнером GUI, и каждый ColonyNode будет добавлен в этот контейнер для отображения в виде сетки. Теперь каждая квадрат обновляется остальной частью программы по определенным значениям переменных. Затем я хочу, чтобы каждый квадрат ссылался на ColonyNode, чтобы общий GUI (среда1) мог получить эту информацию.

+0

'сетки [я] [J] = newSquare'? – SomeJavaGuy

+0

whoa это путаное чтение. Я могу помочь вам связать каждый объект Square с сеткой, но я не могу понять, что здесь происходит. – bholagabbar

+0

«Каждая площадь ссылается на ColonyNode». Я думаю, вы имели в виду, что каждый колониальный код ссылается на Квадрат? – bholagabbar

ответ

2

Позвольте мне помочь вам, но я интерпретирую ваш вопрос несколькими способами.

Давайте посмотрим на это утверждение: «Каждая площадь ссылается на ColonyNode». Это, похоже, ставило в вопрос двусмысленность.

Прежде всего, если вы попытаетесь ссылаться на любые данные из сетки , вы получите NullPointerException. Каждый объект в этом массиве должен быть инициализирован сначала, если хотите, с помощью конструктора.
Так что первые изменения вы должны сделать, это:

grid[i][j]=new Square(); //Initializing the object. An object must be initialized before you can use it 

Теперь, так как вы хотите grid[i][j]Square объект, чтобы быть частью вашей ColonyNodeView, просто добавить конструктор, который принимает в Square объекта, параметр. Я думаю, что в целом то, что вам нужно, это что-то вроде этого:

class ColonyNodeView 
{ 
    //rest of your variables and references here 
    Square sq; //Added a reference for a 'Square' object 
    ColonyNodeView(Square a){ 
     this.sq=a; 
    } 
} 

//In the other module 
for(int i = 0; i<grid.length; i++){ 
     for(int j = 0; j <grid[i].length; j++){ 
      grid[i][j]=new Square(); //Initialize it 
      ColonyNodeView newSquare = new ColonyNodeView(grid[i][j]); 
      //You have now 'linked' the square with the ColonyNodeView. 
      //you can access it by 'newSquare.sq' 
      Environment1.add(newSquare, i, j); //Add the ColonyNodeView linked with the Square to Environment. Looks fine now 
     } 
    } 
+0

Рад, что я мог помочь! :) – bholagabbar

1

Немного запутанного чтения, но из моего понимания, похоже, вам нужно поддерживать сетку квадратов в пределах Environment1. Возможно, следующая структура вам поможет:

public class Environment(){ 
    Square [][] grid; 
    public Environment(int i, int j){ 
     grid = new Square[i][j] 
    } 
    public void setSquare(int i, int j, ColonyNodeView c){ 
     grid[i][j] = c; 
    } 
    public Square getSquare(int i, int j){ 
     return grid[i][j] 
    } 
} 

Теперь интересная деталь. Вы можете иметь это:

public class Square{ 
} 
public class ColonyNodeView extends Square{ 
} 

или вы можете просто избавиться от класса Sqaure все вместе, так и внутри среды имеют ГИРД из ColonyNodeView:

public class Environment(){ 
    ColonyNodeView [][] grid; 
    public Environment(int i, int j){ 
     grid = new ColonyNodeView[i][j] 
    } 
    etc . . . 
} 

Alternative

Вы можете также поставьте ColonyNodeView внутри Square. Таким образом, вы могли бы иметь следующее:

public class Square(){ 
    ColonyNodeView v; 
    public Square(ColonyNodeView v){ 
     this.v = v 
    } 
    //Sets and Gets 
} 

тогда, когда вы звоните setSquare. Вы бы сделали следующее:

public void setSquare(int i, int j, ColonyNodeView c){ 
    grid[i][j].setColony(c); 
} 

Конечно, при таком подходе вам нужно было бы правильно инициализировать сетку.

+0

Я до сих пор не могу понять, хочет ли он, «каждый квадрат ссылается на ColonyView», или каждый «каждый квадрат ссылается на ColonyView». – bholagabbar

+0

Как я уже сказал, это путаное чтение, поэтому я только что рекомендовал эту структуру. Другим подходом было бы обернуть 'ColonyNodeView' внутри' Square'. Поэтому, когда вы вызываете 'setSquare (...)' под капотом, вы получите нечто вроде 'grid [i] [j] .setColony (c)'. –

+1

Я думаю, что если он хочет, чтобы каждая квадратная метка ссылалась на ColonyNodeView, просто добавьте конструктор, который принимает аргумент ColonyNodeView в классе Square. – bholagabbar

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