Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > Arrays.fill()

Reply
Thread Tools

Arrays.fill()

 
 
Ike
Guest
Posts: n/a
 
      06-30-2003
Yow! This doesnt do what I thought it would do! If I have a 2D boolean
array, and say I set a tuple to all false, then go to set the other tuples
using Arrays.fill as in the third line below:

boolean brod[][]= new boolean[3][3];
Arrays.fill(brod[0],true);
Arrays.fill(brod,brod[0]);

Then, if I subsequently set, say brod[0][1]=true; then all brod[?][1] become
true.....but I dont want that at all! How can I use Arrays.fill to fill a 2D
(or N-D) array? thanks, Ike


 
Reply With Quote
 
 
 
 
Adam Maass
Guest
Posts: n/a
 
      07-01-2003

"Ike" <> wrote:
> Yow! This doesnt do what I thought it would do! If I have a 2D boolean
> array, and say I set a tuple to all false, then go to set the other tuples
> using Arrays.fill as in the third line below:
>
> boolean brod[][]= new boolean[3][3];
> Arrays.fill(brod[0],true);
> Arrays.fill(brod,brod[0]);
>
> Then, if I subsequently set, say brod[0][1]=true; then all brod[?][1]

become
> true.....


Because all the brod[?] refer to the same array after your line 3.

> but I dont want that at all! How can I use Arrays.fill to fill a 2D
> (or N-D) array? thanks, Ike



You can't, not in the way you want.


If your array is always 3 x 3, you might get away with:

boolean[][] brod = new boolean[][] {
{true, true, true,},
{true, true, true,},
{true, true, true,},
};


If not, you'll have to write some loops to set the elements.


-- Adam Maass


 
Reply With Quote
 
 
 
 
Adam P. Jenkins
Guest
Posts: n/a
 
      07-01-2003
The key to understanding this behaviour is that the statement:

boolean brod[][] = new boolean[3][3];

does not declare a two-dimensional array of booleans as it would in C/C++.
In Java this declares brod as an array of references to arrays of booleans.
So, your second call to Arrays.fill:

Arrays.fill(brod,brod[0]);

sets each element of brod to point to the array referenced by brod[0]; that
is, now all three elements in brod point to the same array. So, of course
setting brod[0][1]=true means brod[1][1] will also be true, since brod[0]
and brod[1] point to the same array.

Adam

"Ike" <> wrote in message
news:eI3Ma.72388$ thlink.net...
> Yow! This doesnt do what I thought it would do! If I have a 2D boolean
> array, and say I set a tuple to all false, then go to set the other tuples
> using Arrays.fill as in the third line below:
>
> boolean brod[][]= new boolean[3][3];
> Arrays.fill(brod[0],true);
> Arrays.fill(brod,brod[0]);
>
> Then, if I subsequently set, say brod[0][1]=true; then all brod[?][1]

become
> true.....but I dont want that at all! How can I use Arrays.fill to fill a

2D
> (or N-D) array? thanks, Ike
>
>



 
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




Advertisments