2010-10-16 6 views
7

Je viens de démarrer Java récemment, mais je suis sûr que si je codais de la même manière dans une autre langue, je serais confronté au même problème. Ceci est un extrait d'une application où il répertorie tous les nombres premiers jusqu'à la saisie de l'utilisateur.Java: exception de l'index de baies hors limites

La raison pour laquelle x-2 est utilisée comme définition de lArray est que la longueur du tableau sera tous les entiers de 2 jusqu'au nombre {2, 3, 4, 5 ... x}.

je remarquai que pour la ligne

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

si je change i <= newArray-, le code fonctionne sans erreur. Cependant, l'entrée de l'utilisateur, x, est omise ce qui est un problème si x est premier.

Répondre

6

Vous devez utiliser < et non <= dans:

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

Si foo tout tableau, index valide de foo sont [0,foo.length-1]

En utilisant foo.length comme un indice causera ArrayIndexOutofBoundsException.

Et aussi lArray qui contient nombre de nombres naturels <=x mais à l'exclusion seulement un nombre 1, sa valeur doit être x-1 et non x-2.

5

Modifiez la longueur du tableau à (x - 1) à la place, et passez à la condition <, que vous avez déjà trouvée est nécessaire pour éviter l'exception hors-limites.

La raison pour laquelle vous avez besoin d'un tableau qui est 1 élément plus grand que ce que vous utilisez actuellement est parce qu'il y a (n - 1) candidats qui doivent être considérés entre 2 et n, pas (n - 2). Par exemple, il y a deux candidats inférieurs ou égaux à trois (2 et 3), qui, par coïncidence, sont tous deux premiers.

+0

+1 pour prendre en compte les deux problèmes –

1

Vous devez utiliser:

int lArray = x - 1; 

Et changer votre condition d'utiliser < au lieu de <=.

En Java comme en C/C++, les tableaux sont basés sur ZERO. Donc, votre tableau de valeurs N passera de l'index à N-1. Par exemple: {2, 3, 4, 5... x}.

Vous aurez besoin des valeurs N-1 pour stocker tous les nombres positifs, mais dans un tableau d'entiers.Donc, si N égal à 4 , votre tableau sera:

newArray[0] = 2; 
newArray[1] = 3; 
newArray[2] = 4; 

Par conséquent, un tableau de longueur doit être (N-1).

3
for (int i = 0; i <= newArray.length; i++) //should be <, not <= 
for (int i = 0; i < newArray.length; i++) 
Questions connexes