2009-11-30 14 views
0

pour (int i = TrueProbDie; i < 100; i ++) { assert (i> = 0); probs [i] = 1; }ArrayIndexOutOfBoundsException après Assert (i> = 0)

Im obtenir un ArrayIndexOutOfBoundsException sur ce code, en raison i devenir négative, ce que je peux résoudre en modifiant mon autre code, ce qui me faire est que son jamais le faire à la ligne

probs[i] = 1; 

comme devrait jeter une erreur sur

assert(i>=0); 

, si im écrit correctement, im relativement nouveau pour affirme, donc im en supposant que je fais une erreur de débutant de quelque sorte, je ne peux pas tout simplement le suivre vers le bas.

merci beaucoup^_^

+1

int i = TrueProbDie .... vous Vous ne pouvez pas assigner une classe à un int ... oh que vous ne le faites pas. 1) TrueProbDie est un nom de terrrible - même dans un code snippit comme ça la variable devrait avoir un sens. 2) si c'est une constante (ce n'est probablement pas le cas), ce serait TRUE_PROB_DIE, si c'est une variable, elle devrait être trueProbDie. C'est une très bonne idée de suivre les conventions de nommage du langage de programmation que vous utilisez. – TofuBeer

Répondre

3

http://java.sun.com/j2se/1.4.2/docs/guide/lang/assert.html#enable-disable

« Par défaut, les assertions sont désactivées lors de l'exécution. Deux commutateurs de ligne de commande vous permettent d'activer ou de désactiver de manière sélective les assertions.

Pour activer les assertions de différentes granularités, utilisez les -enableassertions, ou Pour désactiver les assertions à différentes granularités, utilisez les options -disableassertions ou -da, vous spécifiez la granularité avec les arguments que vous fournissez au commutateur: "

+0

Ah tout est fait maintenant, merci – Gwilym

0

Êtes-vous certain que i est négatif? Si probs contient moins de 100 éléments, vous aurez cette exception pour essayer de lire après la fin.

+0

la ligne au-dessus est int [] probs = new int [100]; et mon exception exacte est Exception dans le thread "principal" java.lang.ArrayIndexOutOfBoundsException: -29 à Genetics.Population.ProbablityArrayDeath (Population.java:93) à Genetics.Population.kill (Population.java:186) à Genetics.Population.run (Population.java:49) à Control.Main.main (Main.java:38) Merci – Gwilym

2

Les assertions sont désactivées par défaut en Java.

Ré-exécuter ce code avec java -enableassertions et l'assertion sera effectivement vérifiée et vous obtiendrez une AssertionError avant d'arriver au point où vous assignez une valeur à l'index -1.

+0

grâce à vous aussi – Gwilym