Как добавить задержку в сценарии Java? - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь создать визуализатор для сортировки массива целых чисел.Мне нужно нарисовать представление после каждой итерации сортировки и добавить задержку, чтобы она не происходила мгновенно, а показывала только отсортированный массив.Однако setTimeout, похоже, не работает, и он просто отображает представление отсортированного массива, а не после каждой итерации.Код написан на Java-скрипте.

function sort(){
  var len = arr.length;
   for (var i = len-1; i>=0; i--){
    for(var j = 1; j<=i; j++){
       if(arr[j-1]>arr[j]){
           var temp = arr[j-1];
           arr[j-1] = arr[j];
           arr[j] = temp;
           setTimeout(startDraw, 3000);
        }
     }
   }
}

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Попробуйте с let вместо var .

function sort(){
   let len = arr.length;
    for (let i = len-1; i>=0; i--){
       for(let j = 1; j<=i; j++){
          if(arr[j-1]>arr[j]){
            let temp = arr[j-1];
            arr[j-1] = arr[j];
            arr[j] = temp;
            setTimeout(startDraw, 3000);
       }
    }
  }
}
0 голосов
/ 24 декабря 2018

Тебе нужно понять, что ты здесь делаешь.Если вы вызываете setTimeout так, как вы это делаете, это не служит цели, потому что начальный цикл все еще завершается без ожидания вашего setTimeout.Итак, вы должны: 1. Снять с петель и 2. Вызвать вашу функцию отрисовки перед тем, как разбить

var arr = [5,4,4,6,7,7,21,45,5,7,87,1,3,5,65];

function sort(){
  var len = arr.length;
  loop1:
   for (var i = len-1; i>=0; i--){
   loop2:
    for(var j = 1; j<=i; j++){
       if(arr[j-1]>arr[j]){
           var temp = arr[j-1];
           arr[j-1] = arr[j];
           arr[j] = temp;
           console.log(arr);
           setTimeout(sort, 1000);
           break loop1;
        }
     }
   }
}

sort();
...