views:

140

answers:

3

Hi I am trying to take two arrays and turn them into one 2 dimensional array. However, I keep getting an error:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
 at test5.sum(test5.java:12)
 at test5.main(test5.java:38)

Here is my code:

    public class test5 {
 int [][] final23;

 public int [][] sum(int [] x, int[] y)
 {
 final23= new int[2][x.length];
 for (int i = 0; i < final23[i].length; i++)
 {

  final23 [1][i] = x[i];
  final23 [2][i] = y[i];
 }
 return final23;
 }

 public void print()
 {
 for (int i = 0; i < final23[i].length; i++)
 {
  for (int j = 0; j<final23[i].length; j++)
  {

  System.out.print(final23[i][j]+" ");
  }
 }
 }




    public static void main(String[] args)
     {
      int l[] = {7,7,3};
      int k[] = {4,6,2};
      test5 X = new test5();

      X.sum(k,l);
      X.print();
     }
    }

I am not really sure what the problem is. Sorry if the question is dumb, I am new to coding!

+5  A: 

The problem is:

final23 [2][i] = y[i];

Java arrays always start at 0. So final23 only has [0] and [1].

Any array with n elements can go from 0 to n-1.

luiscubal
As well as arrays in most of the common programming languages. At least in those derived from C.
Carlos
+1  A: 

Try

for (int i = 0; i < final23[i].length; i++)
 {

  final23 [0][i] = x[i];
  final23 [1][i] = y[i];
 }

Remember, all arrays are 0 based, even n-dimensional ones.

Dave McClelland
+3  A: 

There is also a second problem with your program. You have this loop in both sum and print methods:

for (int i = 0; i < final23[i].length; i++)

In sum method it should be

for (int i = 0; i < final23[0].length; i++)

And in print method

for (int i = 0; i < final23.length; i++)

Otherwise you'll get ArrayIndexOutOfBoundsException again.

Note that the program works correctly only if both input arrays have the same length. This might be ok for your purposes, but keep that in mind.

Carlos
Thank you! It works :)
Spencer