【问题标题】:Reaching code after loop java循环java后到达代码
【发布时间】:2015-02-21 03:52:03
【问题描述】:

我有一段来自简单聊天应用程序的代码,但这不是这个问题的重要部分。在我看来,这部分代码应该是无法访问的:

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) {

    }

}

我不明白的是,当使用它作为条件的while循环在它之前时,程序将如何到达将“end”变量设置为true的代码部分......我想它是一些我不记得的基本 java 东西,还是我一直忽略的东西 :) 请帮忙?

【问题讨论】:

  • 最明显的建议是其他一些线程在这里点击了关闭开关,将“end”设置为true。另一个明显的建议是,您将在要编写的 catch 块中设置一个“结束”。 (即,如果您失去连接,只需发送“end”并退出循环)
  • 它不是“之前”。这些 while 循环使用不同的方法,如果您要覆盖 run(),您可能正在执行一些线程。
  • 是的,@Overriderun 方法之上的存在表明这个类要么是一个Thread,要么是一个将被线程使用的Runnable。所以这几乎可以肯定是多线程代码,其中一个线程设置end,另一个检查它。
  • @JonKiparsky 你的不满是有道理的,但这是网络编程的一个例子,所以被故意忽略了。我是线程和线程的新手,并且仍在了解这个概念,所以我相信您对其他线程是正确的。你们都是。谢谢!

标签: java while-loop logic conditional-statements unreachable-code


【解决方案1】:

正如代码所说,控件将到达该行

end = true;

当条件

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

返回真!,

也就是 indexOf(String) 方法返回:如果存在字符串中子字符串的索引,如果没有找到则返回 -1!

只有当字符串以子字符串开头时,才能将“0”作为索引。即,当 serverTextLine 以“*** Goodbye”开头时。

【讨论】:

  • 是的,但我不明白的是,当它在实际更改循环条件的代码部分之前不断地通过循环时,它将如何到达 .indexOf :)
  • 只要输入不为空,程序就会打印一些字符串作为输出。!! while 循环检查输入字符串是否为空,如果不为空,则继续并打印字符串。然后它将检查 indexOf 输入字符串到特殊词,这里再见!如果是特殊字,则线程本身在返回时停止执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多