# Array Index Out Of Bounds and Problem in Assigning Values

• 12-28-2009, 03:26 PM
chronoz1300
Array Index Out Of Bounds and Problem in Assigning Values
Code:

```public class Ch6Exercise8 {     public static void main(String[] args) {         int[] divisors = new int[0];                 int number = 7,             divisibilityCount = 0;         for (int x = 1; x <= number; x++) {             if (number % x == 0) {                                 divisibilityCount++;                 divisors = new int[divisibilityCount];             }             for (int i = 0; i <= divisors.length - 1; i++) {                 if (divisors[i] == 0) {                                         divisors[i] = x;                 }                 else {                     divisors[i + 1] = x;                 }             }         }                 for (int x = 0; x <= divisors.length - 1; x++) {             System.out.println(divisors[x]);         }     } }```
can figure it out why is it out of bounds...

what i want in this program is that i want to determine if a number is a prime number(im okay with this part),

but im having problem with the ff:
1.) store it in an integer[] array
2.) the length of an array WILL ONLY DEPEND on the number of the values.
ex: (ofcourse prime numbers are only divisible by 1 and itself) ,
so i want to STORE those values in an array.
but as the case have said, THE LENGTH OF THE ARRAY WILL ONLY
DEPEND O N THE number (i.e Length) of the values. :confused:
• 12-28-2009, 07:54 PM
JosAH
Check your loop for x == 2; no new array will be created and the first value is not equal to zero. I don't know what you want to do exactly but may I suggest you use a List<Integer> for all divisors instead?

kind regards,

Jos
• 12-28-2009, 08:14 PM
AndreB
Your first Exception is because of the inner loop:
If your last number (where i == devisors.length-1) is not zero you jump to the else branch and try to access the array with [i+1] where i+1 is then greater than the bounds of an array

it also very strage why you do that and maybe wrong.

As for your assignment:
Yes, you are right the borders depends on the given number but the number of devisors is limited: it is easy to see that the highest number of devisors would be n/2; namely the the maxmial amount of the smallest devisor: 2
(of course this is not optimal solution)

Also there are two approaches, depending on what you want to achieve.
If you want to do a Primality test then the Sieve of Eratosthenes is a one easy way.
If you want to do factorization look into integer factorization but there is no easy way do do it ;-)