2015-10-30 2 views
-1

У меня проблема с этим классом (извините за действительно грязный код). После этого (scan.hasNextLine()) код выполняется с помощью цикла, ничего не происходит. Код просто зависает. Java не сообщает о какой-либо ошибке, но она должна продолжаться.Ошибка Java while loop, не синтаксис

Класс - это реализация сервера, который собирает сообщения с помощью 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"); 
} 
+3

Пожалуйста, уменьшите код до соответствующей части, а не отправляйте всю свою программу. Что говорит ваш отладчик? –

+2

В 'while (keepRunning = true)' '=' является оператором присваивания, '==' является сопоставлением. Чтобы избежать таких ошибок, просто используйте 'while (keepRunning)' – Pshemo

+0

Спасибо за отзыв. Отладчик ничего не говорит, он должен печатать сообщение «Shapes выбрано», но вместо этого он просто останавливается после цикла while. – tijetof

ответ

0

Из ява Документов hasNextLine()

возвращает истину, если есть еще одна линия на входе этого сканера. Этот метод может блокироваться при ожидании ввода. Сканер не продвигается мимо какого-либо входа.

Поскольку у вас есть строка = scan.nextLine() в цикле, и вы сканируете ее, она будет продолжать ждать ввода. Следовательно, код заблокирован, и вы не видите никакого вывода.