Sumit Kumar Sumit Kumar - 1 year ago 49
Java Question

My multiDimentional Array code is not working correctly

My code below gives me unexpected output.
What I'm trying to do is create a multi dimentional array, and then populate it with values of x, y, z inside a loop. But for some reason, it fills only the "maximum" value of x, y, z in all elements. Instead it should fill the current value. If you uncomment the first System.out line, you'll see the result I actually want.

public class Test{

public static void main( String args[] ){

int[][] a= new int[ 150 ][3];

int[] val = new int[3];
int increment =0;

for( int x=0; x<10; ++x ){
for( int y=0; y<5; ++y ){
for( int z=0; z<3; ++z ){

val[0]=x; val[1]=y; val[2]=z;

a[ increment ]=val;
//System.out.println( x+" "+y+" "+z+" "+ increment )

} } }// for

for( int s=0; s<increment; ++s ){ System.out.println( a[ s ][0]+" "+ a[ s ][1]+" "+ a[ s ][2]+" "+ s ); }


my output:

9 4 4 0
9 4 4 1
9 4 4 increment

expected output:

0 0 0 0
0 0 1 1
0 0 2 2
0 1 1 3
0 1 2 4
upto so on

What did I do wrong?

Answer Source

You set the values in val, but then you set a reference of val in each cell of a. Thus, when the value of val is changed, the values all the references change, and hence they all become 9,4,4. the last value is s which keeps on incrementing in your loop. Thus you get that output.

To get the required output, just reset val before each iteration. Add this line:

val = new int[3];

as the first line in your innermost for loop.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download