Java while循环错误,非语法

时间:2015-10-30 19:48:52

标签: java loops while-loop freeze

我有这个课的问题(对于非常混乱的代码感到抱歉)。 while(scan.hasNextLine())代码完成循环后,没有任何反应。代码冻结了。 Java没有报告任何错误,但它应该继续运行。

Class是服务器的实现,它从套接字收集带有Rock,Paper或Scissors的消息,随机做出自己的决定并将其发送回客户端。

while (keepRunning == true) {
    socket = serverSocket.accept();
    InputStream is = socket.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    StringBuffer stringBuffer = new StringBuffer();
    String line = null;
    Scanner scan = new Scanner(br);
    while (scan.hasNextLine()) {
        line = scan.nextLine();
        stringBuffer.append(line);
        stringBuffer.append("\n");
        listForServer.add(line);
        System.out.println(line);
        if (line.contentEquals("SHAPE") == false) {
            counter = counter + 1;
        }
        Random rn = new Random();
        int n = 2 - 0 + 1;
        int i = rn.nextInt() % n;
        int randomNum = 0 + i;
        if (randomNum == 0) {
            shape = "Rock";
            randServerList.add(shape);
        } else if (randomNum == 1) {
            shape = "Paper";
            randServerList.add(shape);
        } else {
            shape = "Scissors";
            randServerList.add(shape);
        }
    }
    scan.close();
    System.out.println("Shapes are chosen");
    System.out.println("Client has send " + (counter - 1) + "shapes");
}

1 个答案:

答案 0 :(得分:0)

来自hasNextLine()

的java文档

如果此扫描仪的输入中有另一行,则返回true。此方法可能在等待输入时阻塞。扫描仪不会超过任何输入。

由于你在循环中有line = scan.nextLine()并且扫描打开它将继续等待输入。因此,代码被阻止,您看不到任何输出。