Как остановить бесконечный цикл в for который запускается с некоторыми значениями?

Но если поставить значения, допустим [2, 1, 5, 2, 7, 4, 10, 10] или [15,9,6,10,11,2,5] то программа попадает в infinity loop, что делать? Я решаю задачу где каждый элемент массива равен одному блоку контейнера, нужно посчитать сколько зерна влезет между блоками, нужно что бы оно не высыпалось: Думал ставить break но не знаю как правильно или делать проверку: if (levels.length — 1 < levels.length - 2) Но она не работает для всех вариантов когда появляется infinity loop
Отслеживать
задан 9 сен 2022 в 8:29
1 2 2 бронзовых знака
значения, допустим [2, 1, 5, 2, 7, 4, 10, 10] — что это?
9 сен 2022 в 8:55
Аргументы для фн addWheat()
9 сен 2022 в 9:00
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
К сожалению, не разобрался в логике твоей программы, ничего не скажу по поводу бесконечного цикла. Но в таком виде все тесты проходит нормально:
function addWheat(blocks) < if (blocks.length < 3) return 0; let res = 0; let maxHight = blocks.reduce((max, b) =>Math.max(max, b), 0); function calcVolume(left, right) < let hight = Math.min(blocks[left], blocks[right]); return blocks.filter((b, i) =>i>left && i acc += hight - b, 0); > let left = 0; let rigth = 1; do < while (blocks[left] < blocks [left+1]) left++; let right = left+1; let maxRight = right; while (blocks[left] >blocks[right] && right < blocks.length - 1 && blocks[right] < maxHight)< right++; if (blocks[right] >blocks[maxRight]) maxRight = right; > if(right == blocks.length - 1) < if(maxRight >left + 1) right = maxRight; else return res; > res += calcVolume(left, right); left = right; >while (left < blocks.length - 2) return res; >console.log('2= ', addWheat([4, 1, 3])) // 2 console.log('7= ', addWheat([2, 1, 5, 2, 7, 4, 10])) // 7 console.log('6= ', addWheat([2, 0, 1, 5, 2, 7])) // 6 console.log('0= ', addWheat([2, 4, 2]))// 0 console.log('0= ', addWheat([7, 4])) // 0 console.log('0= ', addWheat([])) // 0 console.log('9= ', addWheat([4,0,3,5,0,4])) console.log('3= ', addWheat([4,0,3,2,1,0])) // 0 console.log('0= ', addWheat([3, 2, 1]))
Как остановить цикл js
Чтобы остановить выполнение цикла можно использовать оператор break . Вот пример:
i = i + 1; > console.log(i); // => 3
30 октября 2022
По общему правилу цикл завершает свою работу, когда его условие становится ложным ( false ).
При необходимости мы можем остановить выполнение цикла, используя операторы return или break .
- Пример с return :
Рассмотри функцию, которая определяет, является ли переданное в неё число простым (простое число — такое, которое без остатка делится только на 1 и на само себя: 7, 19, 29, 37 и т.д.)
const isPrime = (num) => // перебираем в цикле все числа от 2 до num - 1 for (let divisor = 2; divisor num - 1; divisor += 1) // если нашли такое число, на которое num делится без остатка, значит num не является простым числом if (num % divisor === 0) // дальнейшее выполнение цикла прерывается, функция возвращает false return false; > > // цикл завершился, функция возвращает true, так как делитель не был найден, следовательно, num является простым числом return true; >;
- пример с break :
Оператор break полностью прекращает выполнение цикла и передаёт управление на первую строку, следующую за телом цикла.
let sum = 0; // создаем бесконечный цикл while (true) // когда сумма достигнет 100, бесконечный цикл будет прерван и сработает console.log(sum) if (sum >= 100) break; > sum += 1; > console.log(sum); // => 100
Курсы javascript
Как мне сделать так что б скажем по нажатию на Enter или Esc
run = false;
и цикл бы останавливался
Ctrl + C не подходит так как он полностью тушит программу, а мне бы хотелось только выйти из этого цикла
Последний раз редактировалось Telnet, 10.03.2020 в 20:53 .
10.03.2020, 23:42
Регистрация: 04.12.2012
Сообщений: 3,654
11.03.2020, 19:15
Регистрация: 21.02.2011
Сообщений: 160
Таймер работает и каждую секунду выводит сколько уже прошло.
Но после запуска вообще перестает реагировать на любые кнопки с клавиатуры, даже Ctrl + C не срабатывает, помогает только перезагрузка консоли.
let keypress = require(‘keypress’); let run = true; let timer = 0; // make `process.stdin` begin emitting «keypress» events keypress(process.stdin); // listen for the «keypress» event process.stdin.on(‘keypress’, function (ch, key) < console.log('got "keypress"', key); >); process.stdin.setRawMode(true); process.stdin.resume(); const msleep = (milliSeconds) => Atomics.wait( new Int32Array(new SharedArrayBuffer(4)), 0, 0, milliSeconds ) ; while (run)
Последний раз редактировалось Telnet, 11.03.2020 в 19:20 .
14.03.2020, 20:29
Регистрация: 21.02.2011
Сообщений: 160
вот пример бесконечного цикла не блокирующего Event loop
Выход из цикла while по нажатию на кнопку Esc
Выход из программы по нажатию по Ctrl + c
const readline = require('readline'); const sleep = require('await-sleep'); let run = true; let timer = 0; readline.emitKeypressEvents(process.stdin); process.stdin.setRawMode(true); process.stdin.on('keypress', (str, key) => < console.log(str, key, run); // Conditions on key if(key.name == 'escape')< run = false; >if(key.name == 'c' && key.ctrl == true) < process.exit(1); >>) async function init() < while (run)< await sleep(1000); timer++; console.log('timer',timer); >> init()
break
Оператор break прерывает выполнение текущего цикла, оператора множественного выбора switch или блочного выражения с меткой. Выполнение кода продолжается с конструкции, следующей за прерванной.
Интерактивный пример
Синтаксис
break [label];
label Необязательный
Идентификатор связанной метки. Если прерываемое выражение не цикл или switch , указание метки обязательно.
Описание
С помощью оператора break можно прервать выполнение блочного выражения с меткой. В таком случае break должен находиться внутри блока кода с указанной меткой. Само блочное выражение может быть любым, а не только циклом.
Использование break , с меткой или без, невозможно внутри функции, которая вложена в прерываемые цикл, конструкцию switch или блочное выражение с меткой.
Примеры
break в цикле while
Следующая функция использует оператор break для выхода из цикла while , когда i станет равно 3, и возвращает значение 3 * x .
function testBreak(x) var i = 0; while (i 6) if (i == 3) break; > i += 1; > return i * x; >
break в конструкции switch
В примере оператор break прервёт выполнение switch сразу после выполнения кода в совпавшем case .
const food = "sushi"; switch (food) case "sushi": console.log("Sushi is originally from Japan."); break; case "pizza": console.log("Pizza is originally from Italy."); break; default: console.log("I have never heard of that dish."); break; >
break в блочном выражении с указанной меткой
В примере используется оператор break с меткой. В таком случае break обязательно должен быть вложен в блок кода с той же меткой. Обратите внимание, что inner_block вложен в outer_block .
outer_block: inner_block: console.log("1"); break outer_block; // break прервёт выполнение кода как в inner_block, так и в outer_block console.log(":-("); // не будет выполнено > console.log("2"); // не будет выполнено >
break вне блочного выражения с указанной меткой
В примере также используется break с меткой, но код будет выполнен с ошибкой SyntaxError , потому что break находится в блоке с меткой block_1 , а прерывается выполнение блока кода с меткой block_2 . Ещё раз, в таком случае break обязательно должен быть вложен в блок кода с меткой, выполнение которого требуется прервать.
block_1: console.log('1'); break block_2; // SyntaxError: label not found > block_2: console.log('2'); >
break внутри функций
Код в примерах также будет выполнен с ошибкой SyntaxError , потому что в обоих случаях break находится в теле функции, вложенной в прерываемый цикл или прерываемое блочное выражение с меткой.
function testBreak(x) var i = 0; while (i 6) if (i == 3) (function() break; >)(); > i += 1; > return i * x; > testBreak(1); // SyntaxError: Illegal break statement
block_1: console.log('1'); ( function() break block_1; // SyntaxError: Undefined label 'block_1' >)(); >
Спецификации
| Specification |
|---|
| ECMAScript Language Specification # sec-break-statement |
Совместимость с браузерами
BCD tables only load in the browser
Смотрите также
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 7 авг. 2023 г. by MDN contributors.
Your blueprint for a better internet.
MDN
Support
- Product help
- Report an issue
Our communities
Developers
- Web Technologies
- Learn Web Development
- MDN Plus
- Hacks Blog
- Website Privacy Notice
- Cookies
- Legal
- Community Participation Guidelines
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2023 by individual mozilla.org contributors. Content available under a Creative Commons license.