Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Java (http://www.velocityreviews.com/forums/f30-java.html)
-   -   Arrays.fill() (http://www.velocityreviews.com/forums/t123889-arrays-fill.html)

 Ike 06-30-2003 11:28 PM

Arrays.fill()

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

Re: Arrays.fill()

"Ike" <rxv@hotmail.com> 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 P. Jenkins 07-01-2003 04:14 AM

Re: Arrays.fill()

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.

"Ike" <rxv@hotmail.com> wrote in message
> 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
>
>

 All times are GMT. The time now is 07:27 AM.