Thank you very much for your prompt response. And actually, before receiving
your replies I kind of figured out a solution. My approach was the similar
to the one that Tony proposed. But instead of using a while loop I did this:
Bag edges = mynetwork.getEdges(agentA, null);
int length = edges.size();
boolean exists = false;
for (int node=0; node<len; node++){
Edge e = (Edge)(edges.get(node));
if(e.getOtherNode(agentA) == agentB){
exists = true;
}else{continue;}
}
if (!exists){
mynetwork.addEdge(agentA, agentB, null);
}
Thank you again,
Beth
On Thu, 26 Sep 2013 15:24:26 -0400, Joey Harrison <[log in to unmask]> wrote:
>Ahh, my mistake.
>
>Joey
>
>
>On Thu, Sep 26, 2013 at 2:38 PM, Tony Bigbee <[log in to unmask]> wrote:
>
>> That won't work. getEdges returns a bag of Edge not Node objects. You
>> have to inspect each Edge looking for the neighbor agentB.
>> I made the same mistake in my first prototype, hoping I could chain calls
>> together in one line...
>>
>>
>>
>> On Thu, Sep 26, 2013 at 12:05 PM, Joey Harrison <[log in to unmask]> wrote:
>>
>>> Bag has a contains method, so you can just do this:
>>>
>>> network.getEdges(agentA, null).contains(agentB)
>>>
>>> Joey
>>>
>>>
>>> On Thu, Sep 26, 2013 at 12:07 PM, Tony Bigbee <[log in to unmask]>wrote:
>>>
>>>> I couldn't find a method in sim.field.network.Network like
>>>> areNeighbors(Object o1, Object o2).
>>>>
>>>> So a starting point would be to use Network's getEdges method and
>>>> iterate through the returned Bag looking for the other agent node in the
>>>> edges. You could write a thin wrapper method to do the job and you would
>>>> have a reusable component, like:
>>>>
>>>> public boolean areNeighbors(Network network, Object agentA, Object
>>>> agentB) {
>>>> Bag edges = network.getEdges(agentA, null); //obtain all edges that
>>>> have agentA; the bag may be empty but it won't be null
>>>> Iterator<Edge> iter = edges.iterator();
>>>> while (iter.hasNext()) { //iterate
>>>> through all edges until we find agentB
>>>> Edge e = iter.next();
>>>> if (e.getOtherNode(agentA)==agentB) { //use agentA as one
>>>> node and see if the other node is agentB
>>>> return true;
>>>> //found it
>>>> }
>>>> }
>>>> return false; //did not find it
>>>> }
>>>>
>>>> Then to achieve what you originally asked:
>>>>
>>>> if ( !areNeighbors(mynetwork, agentA,agentB)) {
>>>> mynetwork.addEdge(agentA,agentB,null);
>>>> }
>>>>
>>>> Tony
>>>>
>>>>
>>>>
>>>> On Thu, Sep 26, 2013 at 3:54 AM, Beth Kar <[log in to unmask]> wrote:
>>>>
>>>>> Hello!
>>>>> I am a newbie to mason (and java) and I am trying to dynamically create
>>>>> an
>>>>> undirected network. I want to add an edge between two nodes using the
>>>>> following code:
>>>>>
>>>>> mynetwork.addEdge(AgentA, AgentB, null).
>>>>>
>>>>> How can I check with an if-then statement before hand if that edge
>>>>> exists
>>>>> before adding it?
>>>>>
>>>>> p.s. If ( edge between AgentA and AgentB doesn't exist) {
>>>>> mynetwork.addEdge(AgentA, AgentB, null)}
>>>>>
>>>>> How do I represent the phrase 'edge between AgentA and AgentB doesn't
>>>>> exist'
>>>>> in java?
>>>>>
>>>>> Thank you in advance for your help!
>>>>> Beth.
>>>>>
>>>>
>>>>
>>>
>>
>
|