Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > arrays in ruby and java

Reply
Thread Tools

arrays in ruby and java

 
 
Zhe Zen
Guest
Posts: n/a
 
      05-21-2008
hi,

i have been translating an algorithm from ruby to java. unfortunately i
stuck with one line of code and would like to ask for some help.

My problem is the following line:

b.data[b.data.index(token)+1]

and here is the context(which i not relevant in my opinion):

def self.reproduce(a, b)
data_size = @@costs[0].length
available = []
0.upto(data_size-1) { |n| available << n }
token = a.data[0]
spawn = [token]
available.delete(token)
while available.length > 0 do
#Select next
if token != b.data.last &&
available.include?(b.data[b.data.index(token)+1])
next_token = b.data[b.data.index(token)+1]
elsif token != a.data.last &&
available.include?(a.data[a.data.index(token)+1])
next_token = a.data[a.data.index(token)+1]
else
next_token = available[rand(available.length)]
end
#Add to spawn
token = next_token
available.delete(token)
spawn << next_token
a, b = b, a if rand < 0.4
end
return Chromosome.new(spawn)
end


my problem is the following: if the array b.data has 10 elements, then
the "+1" could set it to position 10, so that b.data[10] would give back
an error, like the java.lang.IndexOutOfBoundsException, which I get in
Java, when translating. in ruby the code is working, in java obviously
not. could somebody give me a hint, where my error in reasoning is.

thanks in advance

here is my java code:

public void reproduce(int even, int uneven){
int dataSize = DataConverter.costs.length;
LinkedList<Integer> available = new LinkedList<Integer>();
for(int i=0; i<dataSize; i++){
available.add(i);
}
int token = toBreed.get(even).seed.get(0);
ArrayList<Integer> spawn = new ArrayList<Integer>();// TODO correct
spawn?
int counter = 0;
/*token =*/ available.remove(token);// TODO correct?
int last = toBreed.get(uneven).seed.size()-1;// TODO whats that?
while(available.size()>0){
int nextToken;
int hold = toBreed.get(uneven).seed.indexOf(token)+1;
System.out.println("hold "+hold);

int containU = toBreed.get(uneven).seed.get(hold);
int containE =
toBreed.get(even).seed.get(toBreed.get(even).seed. indexOf(token)+1);
if(token != toBreed.get(uneven).seed.get(last) &&
available.contains(containU)){
nextToken = containU;
}else{
if(token!= toBreed.get(even).seed.get(last) &&
available.contains(containE)){
nextToken = containE;
}else{
nextToken =
available.get((int)Math.round(Math.random()*availa ble.size()));
}
}
System.out.println(counter+": "+token+"; "+ nextToken );
// add to spawn
token = nextToken;
Integer rToken = new Integer(token);

available.remove(rToken);
spawn.add(nextToken);
counter +=1;
if(Math.random()<0.4){
int holder = even;
even = uneven;
uneven = holder;
}
}
Chromosome spawnCh = new Chromosome(spawn);
offspring.add(spawnCh);
}
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Robert Klemme
Guest
Posts: n/a
 
      05-21-2008
2008/5/21 Zhe Zen <(E-Mail Removed)>:
> hi,
>
> i have been translating an algorithm from ruby to java. unfortunately i
> stuck with one line of code and would like to ask for some help.
>
> My problem is the following line:
>
> b.data[b.data.index(token)+1]
>
> and here is the context(which i not relevant in my opinion):


> my problem is the following: if the array b.data has 10 elements, then
> the "+1" could set it to position 10, so that b.data[10] would give back
> an error, like the java.lang.IndexOutOfBoundsException, which I get in
> Java, when translating. in ruby the code is working, in java obviously
> not. could somebody give me a hint, where my error in reasoning is.


I cannot see an error in your reasoning. Ruby's Array and Java's List
just behave differently.

As far as I can see you have at least these options:

1. create an implementation of java.util.List that does not throw but
simply returns nil.

2. do a check in your code and if the index is out of bounds use null
instead of list.get(n)

3. write a static helper method that implements option 2

Kind regards

robert

--
use.inject do |as, often| as.you_can - without end

 
Reply With Quote
 
 
 
 
Zhe Zen
Guest
Posts: n/a
 
      05-21-2008
thank you for the reply.

if i got u right, an array in ruby doesnt throw an exception, but just
gives back a null/nil?

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
J. Cooper
Guest
Posts: n/a
 
      05-22-2008
Zhe Zen wrote:
> thank you for the reply.
>
> if i got u right, an array in ruby doesnt throw an exception, but just
> gives back a null/nil?


Yep
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Multidimensional arrays and arrays of arrays Philipp Java 21 01-20-2009 08:33 AM
Problem with va_ macros and arrays of arrays rir3760 C Programming 1 04-04-2005 06:29 AM
char arrays and integer arrays... why the difference? Bill Reyn C++ 3 06-22-2004 12:01 PM
Arrays.asList() returning java.util.Arrays$ArrayList Alexandra Stehman Java 5 06-17-2004 06:04 PM
Arrays and Pointers to Arrays kelvSYC C Programming 2 09-26-2003 06:52 AM



Advertisments