Я написал функцию while loop в функции, но не знаю, как ее остановить. Когда это не соответствует его окончательному условию, петля просто уходит навсегда. Как я могу остановить его?
просто введите свой код правильно:
Вам нужно понять, что оператор break в вашем примере выйдет из бесконечного цикла, который вы создали с помощью while True . Поэтому, когда условие прерывания равно True, программа выйдет из бесконечного цикла и продолжит следующий отложенный блок. Поскольку в коде нет следующего блока, функция заканчивается и ничего не возвращает. Поэтому я исправил ваш код, заменив инструкцию break оператором return .
Следуя вашей идее использовать бесконечный цикл, это лучший способ записать его:
Задача на сортировку : есть стопка блинов разного диаметра, их нужно отсортировать от самого большого до самого маленького. Блины переворачивать можно только лишь вставляя лопатку между блинов и переворачивая все что выше, то есть можно только переворачивать все вместе, что выше лопатки. Как мне кажется задача почти сделана, только проблема в том что если допустим программа отсортирует блины за 1 раз она дальше продолжает идти и переворачивает, то что уже не надо.
#include
#include
using namespace std;
int main()
<
srand(time(0));
int const n = 10;
int choose = 0, max = 0, k = 0, schet = 0, min = 0;
int mas[n];
for (int i = 0; i > mas[i];
>
max = mas[0];
for (int i = 0; i max)
max = mas[i];
>
for (int i = 0; i = i; j–)
<
if (mas[j] == max)
<
for (int y = j; y max)
max = mas[t];
>
>
>
>
for (int i = 0; i Голосование за лучший ответ
Есть кнопка которая при нажатии запускает действие, и при повторном нажатии останавливает
Есть метод который выполняет работу в цикле и при повторном нажатии нужно его остановить:
Но это не работает, в режиме дебага смотрел, при нажатии кнопки выполняется метод public void Stop(bool stopWork), но в методе SomeWork() _stopWork все ровно ровняется false. Почему так? Как это исправить?
1 ответ 1
Пожалуй, вынесу комментарий vitidev в ответ. У Вас действительно при каждом клике создаётся новый объект класса Work . И работа запускается или останавливается каждый раз в другом экземпляре класса. Чтобы этого избежать, необходимо объявление var DoWork = new Work(); вынести за пределы обработчиков нажатий и сделать DoWork , например, свойством класса. Тогда каждый раз обращение будет идти к одному и тому же объекту.
И ещё добавление по правильности ООП лично от меня: не стоит передавать в метод Stop() булев аргумент. Название метода чётко говорит о том, что он должен остановить работу. Однако, если передать в него false , метод перестанет выполнять своё предназначение, что не есть хорошо.
Принимая во внимание оба замечания, ваш код можно переписать так:
Класс будет выглядеть так:
Всё ещё ищете ответ? Посмотрите другие вопросы с метками c# или задайте свой вопрос.
Похожие
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2019 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2019.11.5.35330