Показать сообщение отдельно
  #1 (permalink)  
Старый 08.09.2022, 12:52
Аспирант
Отправить личное сообщение для Olga27 Посмотреть профиль Найти все сообщения от Olga27
 
Регистрация: 10.06.2021
Сообщений: 49

Замена одинаковых букв приводит к бесконечному циклу?
Пытаюсь заменить одинаковые буквы в массиве, для этого устанавливаю флаг isUniq = false; если буквы неуникальны. Проверка букв проходит в дополнительном цикле do while, в итоге происходит бесконечный цикл и браузер начинает зависать.
Чтобы протестировать, как работает замена я убрала do while и добавила ключевое слово “smena” и вывожу через console.log. В итоге код работает если буквы повторяются то выводится “smena”, как например с буквой “Щ” которая встречается в массиве два раза. Пример на картинке.
img.jpg
Однако с флагом происходит зависания браузера из-за невозможности завершить цикл. Как исправить? Вот код:
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">

  <script>
  var bukvy = ['А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З',
  'И', 'Й',
  'К', 'Л', 'М', 'Н', 'О', 'П', 'Р',
  'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я'];
  var slovo;
  var word1='лес';
  
  slovo = word1.split("");
  var isUniq; 

     function showInfo()
     {
     
      for (var i = slovo.length; i < 16; i++)
      {
      
             do
              {
               
                isUniq = true;
                word1 = bukvy[Math.trunc(Math.random()*bukvy.length)];
                
                for (var j=0; j<=i-2;j++)
                {
                  
                  if(slovo[j]==word1) 
                  {
                    isUniq = false;
                   // console.log("smena");
                  }
                }
            }while(isUniq)
           
            slovo[i]=word1;
            //console.log(slovo[i]);
            
          
        
      }
     }
  </script> 
</head>
<body onload="showInfo()">  

</body>
</html>
Ответить с цитированием