为什么我的休息没有回到我的标签上?

时间:2017-04-15 21:22:52

标签: java loops break continue

所以对于学校我试图用2个类进行异步聊天程序;服务器和客户端。基本上,客户端连接到服务器,并将文本写入字符串或输入。如果输入,则客户端侦听文本,而服务器则转而发送。如果输入,则客户端断开连接,服务器重置连接并等待客户端再次连接。我试图用一些do..whiles解决这些要求,然后使用continue标签来重置连接。现在,如果客户端发送连接重置,但服务器只是停止构建而不是返回到我的startConnections标签。这是我的服务器代码,我正在使用中断:

 public static void main(String args[]) {

    startConnections:
    {
        System.out.println("RESET TEST");

        try {
            server = new ServerSocket(12345, 100);


            System.out.println("Waiting for client");
            connection = server.accept();
            System.out.println("Client Connected");

            output = new ObjectOutputStream(connection.getOutputStream());

            output.flush();

            input = new ObjectInputStream(connection.getInputStream());

            do {

                do {
                    messageIn = (String) input.readObject();

                    System.out.println("CLIENT SAYS: " + messageIn);
                } while ((!messageIn.equals("<OVER>")) & (!messageIn.equals("<OUT>")));
                if (messageIn.equals("<OUT>")) {
                    break startConnections;
                }

                do {
                    System.out.print("RESPONSE: ");

                    keyboardInput = new Scanner(System.in);
                    messageOut = keyboardInput.nextLine();

                    output.writeObject(messageOut);

                } while (!messageOut.equals("<OVER>"));

            } while (!messageOut.equals("<OUT>"));

        } catch (Exception e) {
            System.out.println("Oops SERVER! : " + e.toString());
        }

    }
}

1 个答案:

答案 0 :(得分:1)

它有效as it should

  

break语句终止带标签的语句;它不会将控制流转移到标签上。控制流程在标记(终止)语句之后立即转移到语句。

所以break调用之后的下一个执行语句是标有startConnections

的循环之后的语句

要获得所需的行为,您需要使用continue

continue startConnections;
  

带标签的continue语句会跳过标有给定标签的外循环的当前迭代。