Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java while(true)不等于while(!false)_Java_Intellij Idea_While Loop_Client Server - Fatal编程技术网

Java while(true)不等于while(!false)

Java while(true)不等于while(!false),java,intellij-idea,while-loop,client-server,Java,Intellij Idea,While Loop,Client Server,我目前正在一个开发客户机/服务器软件的项目中工作。我有一个奇怪的问题,希望能解决它,但我完全无法解释原因,我找了很长时间 我希望在服务器端有一个while(true)循环,在前一个循环关闭套接字之后,强制服务器继续接受客户机 所以我试着这样建造它: public void run() { Socket socket; while(true) { try { socket = server.accept(); B

我目前正在一个开发客户机/服务器软件的项目中工作。我有一个奇怪的问题,希望能解决它,但我完全无法解释原因,我找了很长时间

我希望在服务器端有一个while(true)循环,在前一个循环关闭套接字之后,强制服务器继续接受客户机

所以我试着这样建造它:

public void run() {

    Socket socket;

    while(true) {
        try {
            socket = server.accept();

            BufferedInputStream in = new BufferedInputStream(socket.getInputStream());
            BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());

            while (socket.isConnected()) {
                // TODO income handling
            }

            in.close();
            out.close();
            socket.close();

        } catch (Exception e) {
            break;
        }
    }
}
但是Intellij告诉我向这个循环添加一个结束条件,我收到了一条错误消息。但我在捕获声明中有一个。改变

while(true)


已导致错误消息消失。有人能给我解释一下区别,以及为什么第一次尝试没有成功?我在研究过程中多次发现这种方式。

这可能是因为您格式化while循环条件的方式。
如果表达式复杂或复杂。编译器没有意识到这些语句是相同的,正如T.J.Crowder所述。另一种解释是,您创建的while(!false)实际上不是while(!false)。显示您将while循环更改为的内容,以获得其他人更清晰的帮助

这可能是因为您格式化while循环条件的方式。
如果表达式复杂或复杂。编译器没有意识到这些语句是相同的,正如T.J.Crowder所述。另一种解释是,您创建的while(!false)实际上不是while(!false)。显示您将while循环更改为的内容,以获得其他人更清晰的帮助

您这样做是在修补应用程序

IDE(IntelliJ)检测到您正在做一些不应该做的事情,并且您试图避免IntelliJ试图通过添加更糟糕的内容来防止您的不良行为

将条件更改为可以在某个时刻完成的条件或使用标志求值


顺便说一下,在无限循环中声明无限类和实例是一种糟糕的做法。

这样做是在修补应用程序

IDE(IntelliJ)检测到您正在做一些不应该做的事情,并且您试图避免IntelliJ试图通过添加更糟糕的内容来防止您的不良行为

将条件更改为可以在某个时刻完成的条件或使用标志求值


顺便说一句,在无限循环中声明无限类和实例是一种糟糕的做法。

首先,IntellJ IDEA检查的目的是帮助您快速发现有问题的代码,而不是让您的生活变得更艰难。 您绝对不应该仅仅为了让IDE满意而更改代码

默认情况下,此检查(“while”语句在不引发异常的情况下无法完成”)会生成警告。 因此,如果您确实遇到了错误,那么您可能会意外更改此检查的设置。 可用检查列表及其严重性设置可在编辑器>检查选项卡的设置对话框中找到

关于
while(true)
while(!false)
之间的区别: 它们都将产生相等的字节码,所以没有区别,只是缺少这种意图实现

如果您不想看到针对特定目的的警告,您可以:

  • 在突出显示的代码上放置文本插入符号(
    ,而在本例中为
  • Alt Enter
  • 在刚刚打开的上下文菜单中选择“检查”“无限循环语句”“选项”
  • 或者

    • 为此特定语句禁用它(菜单项“抑制语句”)
    • 完全禁用此检查(菜单项“禁用检查”)
    • 或打开设置对话框(菜单项“编辑检验配置文件设置”)

    首先,IntellJ IDEA检查的目的是帮助您快速发现有问题的代码,而不是让您的生活更加艰难。 您绝对不应该仅仅为了让IDE满意而更改代码

    默认情况下,此检查(“while”语句在不引发异常的情况下无法完成”)会生成警告。 因此,如果您确实遇到了错误,那么您可能会意外更改此检查的设置。 可用检查列表及其严重性设置可在编辑器>检查选项卡的设置对话框中找到

    关于
    while(true)
    while(!false)
    之间的区别: 它们都将产生相等的字节码,所以没有区别,只是缺少这种意图实现

    如果您不想看到针对特定目的的警告,您可以:

  • 在突出显示的代码上放置文本插入符号(
    ,而在本例中为
  • Alt Enter
  • 在刚刚打开的上下文菜单中选择“检查”“无限循环语句”“选项”
  • 或者

    • 为此特定语句禁用它(菜单项“抑制语句”)
    • 完全禁用此检查(菜单项“禁用检查”)
    • 或打开设置对话框(菜单项“编辑检验配置文件设置”)

    因为IntelliJ显然在(!false)时有代码检测
    (true)
    ,而在(!false)时没有代码检测。在任何情况下,异常都不应该是循环结束的唯一方式。在当前IntelliJ IDEA(最终版,2017.3)中,我既没有收到警告,也没有收到关于
    的错误,而
    则是针对您的代码。对于
    !false
    我唯一得到的是“它可以简化”。是的,删除
    break
    语句您将收到警告,但当出现
    break
    时没有警告。另外,无限循环检查足够聪明,可以理解
    !false
    true
    相同。您正在使用哪个版本的IDEA?因为IntelliJ显然有代码可以在(true)
    时检测
    ,而在(!false)
    时不检测
    。无论如何,异常不应该是循环结束的唯一方式
    
    while(!false)