﻿# V7037\. The nested loop counter is initialized with the outer loop counter\.

Анализатор обнаружил вложенный цикл for, счётчик которого инициализируется значением счётчика внешнего цикла\. Такой код часто содержит ошибку: скорее всего, обход надо начинать со следующего элемента \(i \+ 1\)\.

Рассмотрим пример:

```cpp
function hasDuplicates(arr) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i; j < arr.length; j++) {
      if (arr[i] === arr[j])
        return true;
    }
  }
  return false;
}
```

Функция должна проверять, есть ли в массиве повторяющиеся элементы\. Однако вложенный цикл начинается с `j = i`, поэтому на первой же итерации элемент сравнивается сам с собой: выражение `arr[i] === arr[i]` всегда истинно, и функция вернёт `true` для любого непустого массива\.

Исправленный вариант:

```cpp
function hasDuplicates(arr) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] === arr[j])
        return true;
    }
  }
  return false;
}
```

Анализатор также выдаст ошибку на следующий код:

```cpp
function hasDuplicates(arr) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i; j < arr.length; j++) {
      if (i !== j && arr[i] === arr[j])
        return true;
    }
  }
  return false;
}
```

В нём проверка `i !== j` выполняется на каждой итерации, хотя отсеивает лишь одну\. В этом случае дополнительная итерация является избыточной, так как ветвление усложняет оптимизацию цикла компилятором\.