основной вопрос, если оговорка - PullRequest
2 голосов
/ 21 мая 2011

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

сейчас прошло несколько лет с тех пор, как я программировал, но я программировал около семи лет, и ячетко помните (по крайней мере, о C ++), что всякий раз, когда предложение if начинается, например, с:

if((x-1) >= 0) && ...

, просто не имеет значения, что следует, если часть слева от && имеет значение false.так как, черт возьми, можно было получить исключение массива за пределами границ для x = 0 при использовании «x-1» в правой части?

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

Ответы [ 2 ]

2 голосов
/ 21 мая 2011

Потому что (x-1) может быть больше 0, когда x == array.length.Следующим условием, вероятно, является массив [x] и массив [array.length] -> OutOfBounds.

Я предполагаю, что вы делаете что-то похожее:

if(((x-1) >= 0) && array[x] != null)

, где вы могли бы сделать что-то вроде:

int index = x-1;
if (index >=0 && index < array.length) {
   ...
}
0 голосов
/ 21 мая 2011

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

это также возможно, если x не имеет тип int, но имеет некоторый тип без знака.Единственный неподписанный тип, который приходит мне в голову - это char.Таким образом, если x - это символ, равный 0, и вы вычитаете 1, то в итоге значение x равно 65 535 и, следовательно, больше 0

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...