Достигнув кода после цикла Java

1

У меня есть кусок кода из простого приложения чата, но это не важная часть этого вопроса. Это часть кода, которая, как мне кажется, должна быть недостижима:

while (!end) {
            outputToServer.println(consoleInput.readLine());
        }

        communicationSocket.close();

    } catch (Exception e) {
        // TODO: handle exception
    }
}

@Override
public void run() { // receiving message from other clients

    String serverTextLine;

    try {
        while ((serverTextLine = inputFromServer.readLine()) != null) {
            System.out.println(serverTextLine);

            if (serverTextLine.indexOf("*** Goodbye") == 0) {
                end = true;
                return;
            }
        }

    } catch (Exception e) {

    }

}

То, что я не понимаю, так это то, как программа когда-либо достигнет части кода, в которой она устанавливает переменную "end" в true, когда цикл while, который использует его как условие, перед ним... Я полагаю, что это некоторые основные java, который я не помню, или что-то, что я настойчиво игнорирую :) Помогите, пожалуйста?

  • 2
    Наиболее очевидное предположение заключается в том, что какой-то другой поток нажимает здесь на выключатель, устанавливая для «конца» значение true. Другое очевидное предположение заключается в том, что в блоке перехвата, который будет написан, у вас будет установлен «конец». (то есть, если вы потеряете соединение, просто отправьте «конец» и выйдите из цикла)
  • 1
    Это не «до» этого. Эти циклы while используются в разных методах, и если вы переопределяете run() вы, вероятно, выполняете некоторые потоки.
Показать ещё 2 комментария
Теги:
logic
while-loop
condition
unreachable-code

1 ответ

1

поскольку код говорит, что управление достигнет линии

end = true;

когда условие

serverTextLine.indexOf("*** Goodbye") == 0

возвращает true !,

то есть метод indexOf (String) возвращает: индекс подстроки внутри строки, если она существует, и возвращает -1, если не найден!

Случай, чтобы получить "0" в качестве индекса, только тогда, когда строка начинается с подстроки. т.е. когда serverTextLine начинается с "*** Прощай".

  • 0
    Да, но я не смог понять, как он достигнет .indexOf, когда он постоянно проходит цикл ДО той части кода, в которой он фактически изменяет условие цикла :)
  • 1
    программа будет печатать некоторую строку в качестве выходной, если ввод не нулевой. !! Цикл while проверяет, является ли входная строка нулевой или нет, которая продолжается и печатает строку, если она не нулевая. тогда он проверит входную строку indexOf на специальное слово, здесь до свидания !! и если это специальное слово, то поток сам останавливает выполнение при возврате.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню