Java в сканере, исключение несоответствия ввода - PullRequest
1 голос
/ 26 февраля 2020

Я работаю над java службой сообщений (в стиле Twitter) в cmd.

У меня есть клиент сообщений, в котором я фиксирую команду пользователя / аргумент.

Первый аргумент и команда для Примером может быть «login pete», и это сработало бы.

Однако после ввода «open mike» для открытия канала Майка я получаю исключение несоответствия ввода.

Код

public class MessageClient {
    public static void main(String[] args) throws IOException {

        /*
         * if (args.length != 2) { System.err.println(
         * "Usage: java EchoClient <host name> <port number>"); System.exit(1); }
         */

        /*
         * String hostName = args[0]; int portNumber = Integer.parseInt(args[1]);
         */
        String hostName = "localhost";
        int portNumber = 12345;

        try (
            Socket messageSocket = new Socket(hostName, portNumber);
            PrintWriter out =
                new PrintWriter(messageSocket.getOutputStream(), true);
            Scanner in = new Scanner(messageSocket.getInputStream());
            BufferedReader stdIn =
                new BufferedReader(
                    new InputStreamReader(System.in))
        ) {

            String userInput;
            while ((userInput = stdIn.readLine()) != null) {
                out.println(userInput);
                // Read number of response lines (and skip newline character).
                int n = in.nextInt(); // Input mismatch happens here

                in.nextLine();
                // Read and print each response line.
                for (int i = 0; i < n; i++)
                    System.out.println(in.nextLine());


            }
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host " + hostName);
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to " +
                hostName);
            System.exit(1);
        }
        finally {
            System.exit(1);
        }
    }
}

1 Ответ

0 голосов
/ 26 февраля 2020

Заменить

int n = in.nextInt(); // Input mismatch happens here
in.nextLine();

на

int n = Integer.parseInt(in.nextLine());

Проверьте это для подробного обсуждения.

[Обновить]

Если вам неудобно использовать отладчик, вы можете проверить значение, зафиксированное in.nextLine(), следующим образом:

String n = in.nextLine();
System.out.println(n);
int n = Integer.parseInt(n);

Это даст вам представление о проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...