2016-12-28 1 views
0

Я делаю проблему на codingbat.com и смущен тем, почему это решение проблемы не дает ошибки индекса за пределами границ. Не будет ли первый поиск цикла для индекса, который превышает длину переданного массива?Почему не за пределами ошибки для цикла for (Java)

Вот проблема:

Мы скажем, что значение «везде» в массиве, если для каждой пары соседних элементов в массиве, по меньшей мере, один из пары является то, что значение. Возвращает true, если заданное значение имеет всюду в массиве.

Вот мой рабочий раствор:

public boolean isEverywhere(int[] nums, int val) { 
boolean flag1 = true; 
boolean flag2 = true; 
for (int i = 0; i < nums.length; i += 2) { 
    if (nums[i] != val) flag1 = false; 
} 
for (int i = 0; i < nums.length - 1; i += 2) { 
    if (nums[i + 1] != val) flag2 = false; 
} 
return flag1 || flag2; 
} 

Спасибо!

+0

Я не уверен, что вы спрашиваете, но вы, кажется, неправильно понимаете, что 'i

+1

, поскольку вы стоите только на один меньше, чем' nums.length - 1', затем 'nums [i + 1] 'будет ОК –

+1

Кстати, вам нужна только одна петля для проверки позиций' i' и 'i + 1' –

ответ

3

Нет. Тест проходит после того, как i увеличивается. Итак, как только i не меньше длины массива nums, цикл останавливается. Второй цикл использует i + 1 по адресу if (nums[i + 1] != val), поэтому необходимо проверить, что i меньше, чем length минус один.

Также вы можете сделать способ static (так как он не использует состояние экземпляра).

0

Это было бы не потому, что в то время как i += 2 написано после i < nums.length, цикл по-прежнему проверяет, что i меньше заданной длины (nums.length) перед выходом на тело цикла, даже после того, как 2 было добавлено.

Смежные вопросы