2009-11-30 4 views
0

for (int i = TrueProbDie; i < 100; i ++) { assert (i> = 0); probs [i] = 1; }ArrayIndexOutOfBoundsException после Assert (i> = 0)

Im получая ArrayIndexOutOfBoundsException на этом коде, из-за я стал отрицательным, это можно решить путем редактирования мой другой код, чем получение меня является то, что его когда-либо делает его линии

probs[i] = 1; 

как должен бросить ошибку на

assert(i>=0); 

, если им пишу это правильно, им относительно новой утверждает, так им предполагая, я делаю ошибку новичка какой-то, я просто не могу отслеживать его вниз.

большое спасибо^_^

+1

int i = TrueProbDie .... вы не может назначить класс int ... о, если вы этого не делаете. 1) TrueProbDie - это ужасное имя - даже в фрагменте кода, который должен иметь значение. 2) если он является константой (возможно, нет), это будет TRUE_PROB_DIE, если это переменная, она должна быть trueProbDie. Это очень хорошая идея, чтобы следовать соглашениям об именах используемого вами языка программирования. – TofuBeer

ответ

3

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

«По умолчанию утверждений блокируются во время выполнения. Два переключателей командной строки позволяют выборочно включить или отключить утверждения.

Чтобы включить утверждения на различной гранулярности, используйте -enableassertions, или -ea, switch. Чтобы отключить утверждения в разных деталях, используйте параметры -disableassertions или -da. Вы указываете детализацию с аргументами, которые вы предоставили коммутатору: «

+0

А теперь все это делает, спасибо – Gwilym

0

Вы уверены, что я отрицательно? Если probs содержит менее 100 элементов, вы получите это исключение, пытаясь прочесть его до конца.

+0

строка над ней int [] probs = new int [100]; и мое точное исключение Исключение в потоке "основного" 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) Спасибо – Gwilym

2

Утверждения по умолчанию отключены в Java.

Повторно запустите этот код с помощью java -enableassertions, и это утверждение будет действительно проверено, и вы получите AssertionError, прежде чем дойдете до точки, в которой вы назначаете значение с индексом -1.

+0

благодаря вам, а также – Gwilym