Как остановить бесконечный цикл в 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
Как остановить бесконечный цикл 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 Комментировать

Web & Browser extension developer
Так у вас условие написано
while (1 < 5)< System.out.println("Say: "); >