Перейти к содержимому

Как остановить бесконечный цикл js

  • автор:

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

enter image description here

Но если поставить значения, допустим [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 

Как остановить бесконечный цикл js

Мы хотим сделать этот проект с открытым исходным кодом доступным для людей во всем мире. Пожалуйста, помогите нам перевести это руководство на другие языки.

Светлая тема Тёмная тема
Поделиться

Бесконечный цикл по ошибке

важность: 4

Этот цикл – бесконечный. Он никогда не завершится, почему?

let i = 0; while (i != 10)

Потому что i никогда не станет равным 10 .

Запустите скрипт и вы увидите реальные значения i :

let i = 0; while (i < 11) < i += 0.2; if (i >9.8 && i

Ни одно из этих чисел не равно 10 .

Это происходит из-за потери точности, при прибавлении таких дробей как 0.2 .

Вывод: избегайте проверок на равенство при работе с десятичными дробями.

Как остановить бесконечный цикл?

Я не могу понять почему у меня условие if не отвечает, вместо этого работает цикл (просто каждый раз выдает say).

import java.util.Scanner; public class Assis < public static void main(String[] args) < Scanner say = new Scanner(System.in); System.out.print("Hello, write your name: "); String f = say.nextLine(); System.out.println("Hello " + f); System.out.println(""); System.out.print(f + ", write your age: "); int a = say.nextInt(); /** * Age and name */ if (a >= 13) < System.out.println("Let's continue. "); >else < System.out.println("You can't use this programm."); return; >while (1 < 5)< System.out.println("Say: "); String saa = say.nextLine(); if (saa == "Please exit") < System.out.println("Ok" + f); break; >else if (saa == "No") < System.out.println(":("); >> > >
  • Вопрос задан более года назад
  • 371 просмотр

Комментировать
Решения вопроса 2
mayton2019 @mayton2019
Bigdata Engineer

Это — популярный вопрос на собеседованиях.
if (saa == «Please exit»)
Обычно в Java строки сравнивают через equals() а данное условие выше может сработать а может и нет 🙂

Вот когда оно сработает — это тема небольшой лекции по организации памяти.

Ответ написан более года назад
Комментировать
Нравится 2 Комментировать

XOR2048

Web & Browser extension developer
Так у вас условие написано

while (1 < 5)< System.out.println("Say: "); >

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *