как временно приостановить цикл - PullRequest
0 голосов
/ 20 февраля 2011

Я пишу программу для проверки орфографии, которая проверяет каждое слово в некотором .txt файле. он читает файл, когда достигнут конец файла, и когда он находит неправильное слово, он предлагает правильные варианты в JList. и пользователь выбирает один и нажимает кнопку «Далее». Затем он продолжает читать и искать неправильное слово.

while(EOF is not reached)
{
    check(word);//this returns array of suggestions

    if("next" button is pressed)
    {
        list.getSelectedWord() and continue while loop
    } else {
        suspend loop until "next" button is pressed
    }
}

Ответы [ 2 ]

3 голосов
/ 20 февраля 2011

«Приостановка» цикла while - неправильный подход. Вместо этого ваш алгоритм проверки правописания должен быть параметризован так, чтобы вы могли указать, с чего начать (точно так же, как indexOf предлагает перегрузку, которая позволяет вам указать, где должен начинаться поиск).

Тогда, когда у вас есть комментарий suspend loop until "next" button is pressed, вы должны просто выйти из метода. Затем, в следующий раз, когда будет нажата кнопка «Далее», вы снова запускаете программу проверки, передавая в этот метод позицию в файле, который вы остановили. (В качестве альтернативы вы можете сохранить эту позицию в поле вашего класса.)

1 голос
/ 20 февраля 2011

Я думаю, что самый простой способ сделать что-то подобное - это закодировать цикл в стиле передачи продолжения (выборочно, поскольку Java не поддерживает вызовы реального хвоста). По сути, вы передаете функцию (или Runnable в Java) к коду, который запрашивает у пользователя свой выбор, и как только пользователь делает свой выбор, запускаете функцию / runnable. Это хорошо работает, когда вы подпрыгиваете между потоком событий и рабочими потоками.

Простой способ закодировать это - использовать предложение Кирка о параметризации функции по начальной позиции.

...