Arrays.fill()

I

Ike

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
 
A

Adam Maass

Ike said:
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
 
A

Adam P. Jenkins

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top