Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

System.arraycopy getting java.lang.ArrayIndexOutOfBoundsException

Tags:

java

arrays

System.arraycopy getting ava.lang.ArrayIndexOutOfBoundsException.. I am trying to copy data from one array to the next. but I am getting a exception

private String array[] = { "NO DATA YET" };


 private void setListData()
    {
        String array2[] = { "Iphone", "Tutorials", "Gallery", "Android",    "item 1", "item 2", "item3", "item 4" };
        System.arraycopy(array2, 0, array, 0, array2.length);
    }
like image 859
SJS Avatar asked Sep 15 '11 15:09

SJS


People also ask

What causes Java Lang ArrayIndexOutOfBoundsException?

The ArrayIndexOutOfBoundsException is one of the most common errors in Java. It occurs when a program attempts to access an invalid index in an array i.e. an index that is less than 0, or equal to or greater than the length of the array.

How do you handle ArrayIndexOutOfBoundsException?

Use Proper Start And End Indices Arrays always start with index 0 and not 1. Similarly, the last element in the array can be accessed using the index 'arraylength-1' and not 'arraylength'. Programmers should be careful while using the array limits and thus avoid ArrayIndexOutOfBoundsException.


3 Answers

You're trying to copy 8 items into an array of length 1. You can't do that.

From the documentation:

Otherwise, if any of the following is true, an IndexOutOfBoundsException is thrown and the destination is not modified:

  • The srcPos argument is negative.
  • The destPos argument is negative.
  • The length argument is negative.
  • srcPos+length is greater than src.length, the length of the source array.
  • destPos+length is greater than dest.length, the length of the destination array.

In this case, destPos + length is 8, and dest.length is 1, hence the exception is being thrown.

Note that arrays in Java have a fixed length. If you want an expandable container, look at ArrayList.

like image 135
Jon Skeet Avatar answered Nov 11 '22 18:11

Jon Skeet


Because the length of array is 1.

The declaration array[] = { "NO DATA YET" }; creates an array of length 1 with one item in it.

Instead declare destination array as:

private String array[] = new String[8];
like image 29
Suraj Chandran Avatar answered Nov 11 '22 18:11

Suraj Chandran


array only has a length of 1 and you're trying to copy 8 things into it from array2. Try using an ArrayList or something that will grow as you need it to grow.

like image 41
mamboking Avatar answered Nov 11 '22 20:11

mamboking